Ecng.Collections 1.0.271

dotnet add package Ecng.Collections --version 1.0.271
                    
NuGet\Install-Package Ecng.Collections -Version 1.0.271
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Ecng.Collections" Version="1.0.271" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Ecng.Collections" Version="1.0.271" />
                    
Directory.Packages.props
<PackageReference Include="Ecng.Collections" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Ecng.Collections --version 1.0.271
                    
#r "nuget: Ecng.Collections, 1.0.271"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Ecng.Collections@1.0.271
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Ecng.Collections&version=1.0.271
                    
Install as a Cake Addin
#tool nuget:?package=Ecng.Collections&version=1.0.271
                    
Install as a Cake Tool

Ecng.Collections

Thread-safe collections, specialized data structures, and collection utilities for high-performance scenarios.

Thread-Safe Collections

All synchronized collections provide thread-safe operations with internal locking.

SynchronizedDictionary

Thread-safe wrapper around Dictionary<TKey, TValue>.

var dict = new SynchronizedDictionary<int, string>();

// Thread-safe operations
dict[1] = "one";
dict.Add(2, "two");

if (dict.TryGetValue(1, out var value))
    Console.WriteLine(value); // "one"

// Manual locking for compound operations
using (dict.EnterScope())
{
    if (!dict.ContainsKey(3))
        dict.Add(3, "three");
}

SynchronizedList

Thread-safe list with notification support.

var list = new SynchronizedList<string>();

list.Add("item1");
list.AddRange(new[] { "item2", "item3" });

// Safe iteration with scope
using (list.EnterScope())
{
    foreach (var item in list)
        Console.WriteLine(item);
}

CachedSynchronizedList

Thread-safe list that caches its array representation for fast enumeration.

var list = new CachedSynchronizedList<int>();

list.Add(1);
list.Add(2);
list.Add(3);

// Cache is computed once and reused until list changes
int[] cached = list.Cache;
foreach (var item in cached)
    Console.WriteLine(item);

// After modification, cache is invalidated
list.Add(4);
int[] newCache = list.Cache; // Recomputed

CachedSynchronizedDictionary

Thread-safe dictionary with cached key/value arrays.

var dict = new CachedSynchronizedDictionary<string, int>();

dict["a"] = 1;
dict["b"] = 2;

// Cached arrays for fast iteration
string[] keys = dict.CachedKeys;
int[] values = dict.CachedValues;
KeyValuePair<string, int>[] pairs = dict.CachedPairs;

SynchronizedSet

Thread-safe HashSet<T> wrapper.

var set = new SynchronizedSet<int>();

set.Add(1);
set.Add(2);
bool added = set.Add(1); // false, already exists

bool contains = set.Contains(1); // true

Specialized Collections

PairSet - Bidirectional Dictionary

Allows lookup by both key and value.

var pairs = new PairSet<int, string>();

pairs.Add(1, "one");
pairs.Add(2, "two");

// Forward lookup (key -> value)
string value = pairs.GetValue(1); // "one"

// Reverse lookup (value -> key)
int key = pairs.GetKey("two"); // 2

// Check existence
bool hasKey = pairs.ContainsKey(1);
bool hasValue = pairs.ContainsValue("one");

// Remove by value
pairs.RemoveByValue("one");

SynchronizedPairSet

Thread-safe version of PairSet.

var pairs = new SynchronizedPairSet<Guid, string>();

var id = Guid.NewGuid();
pairs.Add(id, "session-1");

// Thread-safe bidirectional lookup
if (pairs.TryGetValue(id, out var session))
    Console.WriteLine(session);

if (pairs.TryGetKey("session-1", out var foundId))
    Console.WriteLine(foundId);

CircularBuffer

Fixed-size buffer that overwrites oldest elements when full.

var buffer = new CircularBuffer<int>(capacity: 3);

buffer.PushBack(1);
buffer.PushBack(2);
buffer.PushBack(3);
// Buffer: [1, 2, 3]

buffer.PushBack(4);
// Buffer: [2, 3, 4] - oldest (1) was overwritten

int front = buffer.Front(); // 2
int back = buffer.Back();   // 4
int second = buffer[1];     // 3

// Remove from ends
buffer.PopFront(); // Removes 2
buffer.PopBack();  // Removes 4

// Convert to array
int[] arr = buffer.ToArray();

// Resize buffer
buffer.Capacity = 5; // Grow
buffer.Capacity = 2; // Shrink (keeps newest elements)

CircularBufferEx

Extended circular buffer with additional operations.

var buffer = new CircularBufferEx<decimal>(100);

// Add elements
buffer.PushBack(1.5m);
buffer.PushBack(2.5m);

// Sum, min, max operations
decimal sum = buffer.Sum;
decimal min = buffer.Min;
decimal max = buffer.Max;

NumericCircularBufferEx

Circular buffer optimized for numeric calculations with running statistics.

var buffer = new NumericCircularBufferEx<double>(100);

for (int i = 0; i < 100; i++)
    buffer.PushBack(Math.Sin(i));

// Efficient statistics (computed incrementally)
double sum = buffer.Sum;
double min = buffer.Min;
double max = buffer.Max;

Queue and Stack Extensions

SynchronizedQueue

Thread-safe queue.

var queue = new SynchronizedQueue<Message>();

queue.Enqueue(new Message("hello"));

if (queue.TryDequeue(out var msg))
    Process(msg);

SynchronizedStack

Thread-safe stack.

var stack = new SynchronizedStack<int>();

stack.Push(1);
stack.Push(2);

if (stack.TryPop(out var value))
    Console.WriteLine(value); // 2

QueueEx / StackEx

Extended queue and stack with additional peek operations.

var queue = new QueueEx<int>();
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);

int first = queue.PeekFirst();  // 1 (front)
int last = queue.PeekLast();    // 3 (back)

Ordered Channels

BaseOrderedChannel

Base class for ordered message processing with channels.

// Used for ordered async message processing
// See ChannelExtensions for usage patterns

Bit Array Operations

BitArrayWriter / BitArrayReader

Efficient bit-level I/O for binary data.

// Writing bits
var writer = new BitArrayWriter();
writer.Write(true);           // 1 bit
writer.Write(42, 8);          // 8 bits
writer.WriteInt(1000);        // Variable-length int

byte[] data = writer.ToArray();

// Reading bits
var reader = new BitArrayReader(data);
bool flag = reader.Read();     // 1 bit
int value = reader.Read(8);    // 8 bits
int number = reader.ReadInt(); // Variable-length int

Collection Interfaces

INotifyList

List that raises events on modifications.

public interface INotifyList<T> : IList<T>
{
    event Action<T> Adding;
    event Action<T> Added;
    event Action<T> Removing;
    event Action<T> Removed;
    event Action Clearing;
    event Action Cleared;
    event Action Changed;
}

ISynchronizedCollection

Interface for thread-safe collections.

public interface ISynchronizedCollection<T> : ICollection<T>
{
    SyncObject SyncRoot { get; }
    LockScope EnterScope();
}

Extension Methods

using Ecng.Collections;

// Check if collection is empty
IEnumerable<int> items = GetItems();
if (items.IsEmpty())
    return;

// Safe first/last
var first = items.FirstOr(defaultValue: -1);
var last = items.LastOr(defaultValue: -1);

// Batch processing
foreach (var batch in items.Batch(100))
    ProcessBatch(batch);

// Index lookup
int index = items.IndexOf(x => x > 10);

NuGet

Install-Package Ecng.Collections
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (7)

Showing the top 5 NuGet packages that depend on Ecng.Collections:

Package Downloads
Ecng.Reflection

Ecng system framework

Ecng.Security

Ecng system framework

Ecng.StringSearch

Ecng system framework

Ecng.Roslyn

Ecng system framework

Ecng.Backup.Mega

Ecng system framework

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.271 948 12/30/2025
1.0.270 676 12/29/2025
1.0.269 1,172 12/26/2025
1.0.268 786 12/26/2025
1.0.267 771 12/26/2025
1.0.266 787 12/26/2025
1.0.265 847 12/25/2025
1.0.264 862 12/25/2025
1.0.263 1,362 12/22/2025
1.0.262 865 12/21/2025
1.0.261 934 12/19/2025
1.0.260 889 12/19/2025
1.0.259 1,071 12/17/2025
1.0.258 1,182 12/15/2025
1.0.257 904 12/15/2025
1.0.256 869 12/14/2025
1.0.255 1,972 12/12/2025
1.0.254 1,144 12/12/2025
1.0.253 749 12/12/2025
1.0.252 754 12/12/2025
1.0.251 1,104 12/12/2025
1.0.250 17,062 12/2/2025
1.0.249 17,295 12/2/2025
1.0.248 18,067 12/2/2025
1.0.247 33,644 11/30/2025
1.0.246 36,634 11/29/2025
1.0.245 38,794 11/28/2025
1.0.244 39,507 11/28/2025
1.0.243 43,321 11/27/2025
1.0.242 63,059 11/24/2025
1.0.241 64,814 11/24/2025
1.0.240 69,573 11/23/2025
1.0.239 74,991 11/22/2025
1.0.238 93,048 11/20/2025
1.0.237 116,070 11/18/2025
1.0.236 116,753 11/18/2025
1.0.235 159,502 11/13/2025
1.0.234 192,167 11/10/2025
1.0.233 232,832 11/1/2025
1.0.232 232,074 10/28/2025
1.0.231 232,032 10/27/2025
1.0.230 231,907 10/27/2025
1.0.229 231,844 10/25/2025
1.0.228 282,311 10/3/2025
1.0.227 282,379 9/28/2025
1.0.226 282,119 9/25/2025
1.0.225 305,870 8/30/2025
1.0.224 280,598 7/13/2025
1.0.223 272,111 7/13/2025
1.0.222 272,136 7/12/2025
1.0.221 273,361 7/8/2025
1.0.220 272,929 7/4/2025
1.0.219 272,195 7/2/2025
1.0.218 277,088 6/16/2025
1.0.217 272,357 6/9/2025
1.0.216 272,226 6/8/2025
1.0.215 273,869 5/21/2025
1.0.214 272,333 5/17/2025
1.0.213 273,943 5/12/2025
1.0.212 272,259 5/12/2025
1.0.211 274,703 4/17/2025
1.0.210 277,346 3/22/2025
1.0.209 272,225 3/20/2025
1.0.208 272,172 3/20/2025
1.0.207 272,206 3/19/2025
1.0.206 277,373 2/26/2025
1.0.205 272,288 2/26/2025
1.0.204 280,704 2/5/2025
1.0.203 276,211 1/21/2025
1.0.202 275,567 1/14/2025
1.0.201 274,407 1/12/2025
1.0.200 272,845 1/10/2025
1.0.199 276,508 12/27/2024
1.0.198 273,313 11/20/2024
1.0.197 275,797 11/18/2024
1.0.196 274,126 11/7/2024
1.0.195 273,513 10/19/2024
1.0.194 275,368 10/12/2024
1.0.193 275,924 10/5/2024
1.0.192 277,031 9/18/2024
1.0.191 272,306 9/17/2024
1.0.190 276,723 9/3/2024
1.0.189 272,372 9/1/2024
1.0.188 286,476 6/12/2024
1.0.187 275,213 5/28/2024
1.0.186 275,963 5/4/2024
1.0.185 274,648 4/23/2024
1.0.184 273,726 4/21/2024
1.0.183 272,563 4/14/2024
1.0.182 277,914 3/28/2024
1.0.181 272,490 3/17/2024
1.0.180 275,917 2/23/2024
1.0.179 272,521 2/23/2024
1.0.178 275,903 2/18/2024
1.0.177 272,497 2/18/2024
1.0.176 272,573 2/16/2024
1.0.175 274,667 2/13/2024
1.0.174 274,395 2/8/2024
1.0.173 274,842 2/5/2024
1.0.172 272,555 2/4/2024
1.0.171 275,087 1/23/2024
1.0.170 272,654 1/23/2024
1.0.169 274,358 1/12/2024
1.0.168 277,783 1/2/2024
1.0.167 272,871 12/29/2023
1.0.166 291,063 11/12/2023
1.0.165 684,177 11/10/2023
1.0.164 272,836 11/10/2023
1.0.163 683,874 11/9/2023
1.0.162 684,772 11/3/2023
1.0.161 683,711 11/1/2023
1.0.160 683,766 11/1/2023
1.0.159 709,118 9/8/2023
1.0.158 684,186 9/8/2023
1.0.157 684,433 9/3/2023
1.0.156 684,700 8/21/2023
1.0.155 274,107 8/14/2023
1.0.154 685,225 8/10/2023
1.0.153 724,874 6/29/2023
1.0.152 699,293 5/27/2023
1.0.151 273,795 5/21/2023
1.0.150 273,906 5/19/2023
1.0.149 710,283 5/8/2023
1.0.148 690,214 4/21/2023
1.0.147 735,906 4/3/2023
1.0.146 692,383 3/13/2023
1.0.145 704,223 3/6/2023
1.0.144 686,354 2/26/2023
1.0.143 290,281 2/21/2023
1.0.142 274,694 2/20/2023
1.0.141 275,960 2/15/2023
1.0.140 274,706 2/14/2023
1.0.139 718,195 2/9/2023
1.0.138 291,131 2/7/2023
1.0.137 686,222 2/4/2023
1.0.136 706,297 2/2/2023
1.0.135 702,588 1/30/2023
1.0.134 280,725 1/18/2023
1.0.133 729,950 12/30/2022
1.0.132 688,265 12/23/2022
1.0.131 706,700 12/12/2022
1.0.130 709,325 12/4/2022
1.0.129 686,773 12/4/2022
1.0.128 687,522 11/30/2022
1.0.127 275,910 11/29/2022
1.0.126 276,081 11/28/2022
1.0.125 691,001 11/18/2022
1.0.124 714,269 11/11/2022
1.0.123 687,053 11/11/2022
1.0.122 276,153 11/10/2022
1.0.121 687,326 11/5/2022
1.0.120 688,676 11/4/2022
1.0.119 710,771 11/1/2022
1.0.118 711,053 10/16/2022
1.0.117 694,312 9/10/2022
1.0.116 737,872 9/8/2022
1.0.115 687,578 9/8/2022
1.0.114 276,756 9/8/2022
1.0.113 689,916 9/4/2022
1.0.112 366,351 8/24/2022
1.0.111 696,990 8/8/2022
1.0.110 690,653 7/26/2022
1.0.109 687,800 7/26/2022
1.0.108 740,274 7/19/2022
1.0.107 321,813 7/18/2022
1.0.106 281,887 7/8/2022
1.0.105 692,011 6/18/2022
1.0.104 687,823 6/6/2022
1.0.103 784,375 4/30/2022
1.0.102 688,087 4/20/2022
1.0.101 688,142 4/10/2022
1.0.100 688,116 4/7/2022
1.0.99 688,039 4/7/2022
1.0.98 688,230 4/2/2022
1.0.97 288,596 3/29/2022
1.0.96 280,172 3/27/2022
1.0.95 563,266 1/24/2022
1.0.94 847,065 12/29/2021
1.0.93 714,334 12/20/2021
1.0.92 687,748 12/13/2021
1.0.91 743,875 12/6/2021
1.0.90 278,391 12/2/2021
1.0.89 715,469 11/29/2021
1.0.88 714,059 11/22/2021
1.0.87 275,212 11/17/2021
1.0.86 715,891 11/13/2021
1.0.85 278,651 11/10/2021
1.0.84 686,221 11/9/2021
1.0.83 337,782 11/5/2021
1.0.82 687,951 11/4/2021
1.0.81 686,108 11/4/2021
1.0.80 686,020 11/3/2021
1.0.79 686,267 10/30/2021
1.0.78 717,513 10/21/2021
1.0.77 686,696 10/17/2021
1.0.76 747,440 10/14/2021
1.0.75 697,330 10/13/2021
1.0.74 686,292 10/12/2021
1.0.73 717,923 10/11/2021
1.0.72 686,121 10/9/2021
1.0.71 721,288 10/7/2021
1.0.70 723,358 10/7/2021
1.0.69 686,239 10/7/2021
1.0.68 275,382 10/6/2021
1.0.67 686,364 9/28/2021
1.0.66 720,096 9/23/2021
1.0.65 687,995 9/10/2021
1.0.64 686,099 9/9/2021
1.0.63 686,116 9/8/2021
1.0.62 686,229 9/8/2021
1.0.61 717,004 9/6/2021
1.0.60 275,583 8/31/2021
1.0.59 275,353 8/30/2021
1.0.58 719,286 7/31/2021
1.0.57 745,811 7/30/2021
1.0.56 686,570 7/26/2021
1.0.55 775,141 7/5/2021
1.0.54 275,591 7/1/2021
1.0.53 748,673 6/4/2021
1.0.52 776,371 4/26/2021
1.0.51 716,950 4/19/2021
1.0.50 834,948 4/7/2021
1.0.49 716,156 4/3/2021
1.0.48 864,146 3/22/2021
1.0.47 798,006 3/4/2021
1.0.46 719,325 2/26/2021
1.0.45 853,294 2/2/2021
1.0.44 389,756 1/24/2021
1.0.43 276,053 1/24/2021
1.0.42 275,682 1/23/2021
1.0.41 333,096 1/20/2021
1.0.40 686,467 1/20/2021
1.0.39 304,149 1/18/2021
1.0.38 275,631 1/18/2021
1.0.37 713,615 1/16/2021
1.0.36 803,435 12/16/2020
1.0.35 740,909 12/14/2020
1.0.34 718,676 12/9/2020
1.0.33 688,758 12/6/2020
1.0.32 276,068 12/2/2020
1.0.31 686,784 12/2/2020
1.0.30 715,051 12/1/2020
1.0.29 875,378 11/12/2020
1.0.29-atestpub 2,470 11/11/2020
1.0.28 716,075 10/11/2020
1.0.27 797,851 9/9/2020
1.0.26 714,630 9/3/2020
1.0.25 304,380 8/20/2020
1.0.24 770,335 8/9/2020
1.0.23 304,663 7/28/2020
1.0.22 303,614 7/19/2020
1.0.21 330,818 7/6/2020
1.0.20 770,776 6/6/2020
1.0.19 715,818 6/4/2020
1.0.18 332,189 5/29/2020
1.0.17 743,000 5/21/2020
1.0.16 687,611 5/17/2020
1.0.15 741,764 5/12/2020
1.0.14 796,173 5/4/2020
1.0.13 691,692 4/24/2020
1.0.12 694,404 4/22/2020
1.0.11 687,407 4/22/2020
1.0.10 687,447 4/21/2020
1.0.9 716,605 4/18/2020
1.0.8 303,654 4/16/2020
1.0.7 276,466 4/16/2020
1.0.6 709,600 4/15/2020
1.0.5 712,204 4/11/2020
1.0.4 711,096 4/3/2020
1.0.3 275,956 4/1/2020
1.0.2 698,020 3/27/2020
1.0.1 697,055 3/22/2020
1.0.0 279,326 3/22/2020