Ecng.Collections 1.0.285

dotnet add package Ecng.Collections --version 1.0.285
                    
NuGet\Install-Package Ecng.Collections -Version 1.0.285
                    
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.285" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Ecng.Collections" Version="1.0.285" />
                    
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.285
                    
#r "nuget: Ecng.Collections, 1.0.285"
                    
#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.285
                    
#: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.285
                    
Install as a Cake Addin
#tool nuget:?package=Ecng.Collections&version=1.0.285
                    
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>
{
    Lock 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 (8)

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.285 315 2/4/2026
1.0.284 1,620 2/1/2026
1.0.283 1,676 1/26/2026
1.0.282 866 1/22/2026
1.0.281 2,111 1/19/2026
1.0.280 838 1/19/2026
1.0.279 815 1/18/2026
1.0.278 807 1/18/2026
1.0.277 1,453 1/14/2026
1.0.276 870 1/13/2026
1.0.275 821 1/13/2026
1.0.274 1,252 1/9/2026
1.0.273 895 1/9/2026
1.0.272 14,361 1/4/2026
1.0.271 31,431 12/30/2025
1.0.270 33,989 12/29/2025
1.0.269 52,476 12/26/2025
1.0.268 52,485 12/26/2025
1.0.267 52,529 12/26/2025
1.0.266 52,534 12/26/2025
1.0.265 58,022 12/25/2025
1.0.264 59,288 12/25/2025
1.0.263 75,992 12/22/2025
1.0.262 83,000 12/21/2025
1.0.261 91,305 12/19/2025
1.0.260 91,977 12/19/2025
1.0.259 100,356 12/17/2025
1.0.258 114,938 12/15/2025
1.0.257 114,843 12/15/2025
1.0.256 121,106 12/14/2025
1.0.255 141,923 12/12/2025
1.0.254 141,233 12/12/2025
1.0.253 140,860 12/12/2025
1.0.252 140,855 12/12/2025
1.0.251 141,604 12/12/2025
1.0.250 204,744 12/2/2025
1.0.249 204,968 12/2/2025
1.0.248 205,748 12/2/2025
1.0.247 221,315 11/30/2025
1.0.246 224,319 11/29/2025
1.0.245 226,483 11/28/2025
1.0.244 227,193 11/28/2025
1.0.243 231,004 11/27/2025
1.0.242 250,750 11/24/2025
1.0.241 252,492 11/24/2025
1.0.240 257,269 11/23/2025
1.0.239 262,680 11/22/2025
1.0.238 280,799 11/20/2025
1.0.237 303,771 11/18/2025
1.0.236 304,451 11/18/2025
1.0.235 347,203 11/13/2025
1.0.234 379,855 11/10/2025
1.0.233 420,510 11/1/2025
1.0.232 419,760 10/28/2025
1.0.231 419,725 10/27/2025
1.0.230 419,588 10/27/2025
1.0.229 419,517 10/25/2025
1.0.228 469,983 10/3/2025
1.0.227 470,052 9/28/2025
1.0.226 469,794 9/25/2025
1.0.225 494,128 8/30/2025
1.0.224 468,384 7/13/2025
1.0.223 459,787 7/13/2025
1.0.222 459,808 7/12/2025
1.0.221 461,147 7/8/2025
1.0.220 460,601 7/4/2025
1.0.219 459,884 7/2/2025
1.0.218 464,765 6/16/2025
1.0.217 460,039 6/9/2025
1.0.216 459,904 6/8/2025
1.0.215 461,548 5/21/2025
1.0.214 460,026 5/17/2025
1.0.213 461,612 5/12/2025
1.0.212 459,940 5/12/2025
1.0.211 462,428 4/17/2025
1.0.210 465,035 3/22/2025
1.0.209 459,913 3/20/2025
1.0.208 459,843 3/20/2025
1.0.207 459,885 3/19/2025
1.0.206 465,079 2/26/2025
1.0.205 459,970 2/26/2025
1.0.204 468,395 2/5/2025
1.0.203 463,894 1/21/2025
1.0.202 463,260 1/14/2025
1.0.201 462,082 1/12/2025
1.0.200 460,537 1/10/2025
1.0.199 464,214 12/27/2024
1.0.198 460,987 11/20/2024
1.0.197 463,487 11/18/2024
1.0.196 461,798 11/7/2024
1.0.195 461,199 10/19/2024
1.0.194 463,040 10/12/2024
1.0.193 463,595 10/5/2024
1.0.192 464,705 9/18/2024
1.0.191 459,988 9/17/2024
1.0.190 464,398 9/3/2024
1.0.189 460,053 9/1/2024
1.0.188 474,147 6/12/2024
1.0.187 462,909 5/28/2024
1.0.186 463,657 5/4/2024
1.0.185 462,333 4/23/2024
1.0.184 461,415 4/21/2024
1.0.183 460,240 4/14/2024
1.0.182 465,604 3/28/2024
1.0.181 460,188 3/17/2024
1.0.180 463,612 2/23/2024
1.0.179 460,208 2/23/2024
1.0.178 463,580 2/18/2024
1.0.177 460,199 2/18/2024
1.0.176 460,263 2/16/2024
1.0.175 462,343 2/13/2024
1.0.174 462,067 2/8/2024
1.0.173 462,526 2/5/2024
1.0.172 460,226 2/4/2024
1.0.171 462,784 1/23/2024
1.0.170 460,356 1/23/2024
1.0.169 462,054 1/12/2024
1.0.168 465,490 1/2/2024
1.0.167 460,576 12/29/2023
1.0.166 478,759 11/12/2023
1.0.165 871,871 11/10/2023
1.0.164 460,526 11/10/2023
1.0.163 871,566 11/9/2023
1.0.162 872,470 11/3/2023
1.0.161 871,399 11/1/2023
1.0.160 871,442 11/1/2023
1.0.159 896,807 9/8/2023
1.0.158 871,865 9/8/2023
1.0.157 872,121 9/3/2023
1.0.156 872,375 8/21/2023
1.0.155 461,784 8/14/2023
1.0.154 872,896 8/10/2023
1.0.153 912,557 6/29/2023
1.0.152 886,969 5/27/2023
1.0.151 461,472 5/21/2023
1.0.150 461,578 5/19/2023
1.0.149 897,968 5/8/2023
1.0.148 877,876 4/21/2023
1.0.147 923,598 4/3/2023
1.0.146 880,043 3/13/2023
1.0.145 891,893 3/6/2023
1.0.144 874,028 2/26/2023
1.0.143 477,963 2/21/2023
1.0.142 462,374 2/20/2023
1.0.141 463,631 2/15/2023
1.0.140 462,398 2/14/2023
1.0.139 905,855 2/9/2023
1.0.138 478,812 2/7/2023
1.0.137 873,905 2/4/2023
1.0.136 893,972 2/2/2023
1.0.135 890,253 1/30/2023
1.0.134 468,416 1/18/2023
1.0.133 917,638 12/30/2022
1.0.132 875,959 12/23/2022
1.0.131 894,370 12/12/2022
1.0.130 897,006 12/4/2022
1.0.129 874,464 12/4/2022
1.0.128 875,196 11/30/2022
1.0.127 463,586 11/29/2022
1.0.126 463,753 11/28/2022
1.0.125 878,681 11/18/2022
1.0.124 901,946 11/11/2022
1.0.123 874,733 11/11/2022
1.0.122 463,820 11/10/2022
1.0.121 875,010 11/5/2022
1.0.120 876,354 11/4/2022
1.0.119 898,460 11/1/2022
1.0.118 898,744 10/16/2022
1.0.117 881,991 9/10/2022
1.0.116 925,569 9/8/2022
1.0.115 875,262 9/8/2022
1.0.114 464,447 9/8/2022
1.0.113 877,597 9/4/2022
1.0.112 554,040 8/24/2022
1.0.111 884,666 8/8/2022
1.0.110 878,338 7/26/2022
1.0.109 875,489 7/26/2022
1.0.108 927,955 7/19/2022
1.0.107 509,498 7/18/2022
1.0.106 469,572 7/8/2022
1.0.105 879,695 6/18/2022
1.0.104 875,509 6/6/2022
1.0.103 972,068 4/30/2022
1.0.102 875,763 4/20/2022
1.0.101 875,812 4/10/2022
1.0.100 875,802 4/7/2022
1.0.99 875,714 4/7/2022
1.0.98 875,898 4/2/2022
1.0.97 476,287 3/29/2022
1.0.96 467,853 3/27/2022
1.0.95 751,087 1/24/2022
1.0.94 1,034,752 12/29/2021
1.0.93 902,013 12/20/2021
1.0.92 875,432 12/13/2021
1.0.91 931,547 12/6/2021
1.0.90 466,068 12/2/2021
1.0.89 903,133 11/29/2021
1.0.88 901,726 11/22/2021
1.0.87 462,880 11/17/2021
1.0.86 903,578 11/13/2021
1.0.85 466,323 11/10/2021
1.0.84 873,899 11/9/2021
1.0.83 525,452 11/5/2021
1.0.82 875,639 11/4/2021
1.0.81 873,778 11/4/2021
1.0.80 873,711 11/3/2021
1.0.79 873,942 10/30/2021
1.0.78 905,200 10/21/2021
1.0.77 874,378 10/17/2021
1.0.76 935,138 10/14/2021
1.0.75 885,010 10/13/2021
1.0.74 873,974 10/12/2021
1.0.73 905,613 10/11/2021
1.0.72 873,800 10/9/2021
1.0.71 908,988 10/7/2021
1.0.70 911,039 10/7/2021
1.0.69 873,915 10/7/2021
1.0.68 463,056 10/6/2021
1.0.67 874,037 9/28/2021
1.0.66 907,775 9/23/2021
1.0.65 875,669 9/10/2021
1.0.64 873,784 9/9/2021
1.0.63 873,799 9/8/2021
1.0.62 873,926 9/8/2021
1.0.61 904,684 9/6/2021
1.0.60 463,264 8/31/2021
1.0.59 463,034 8/30/2021
1.0.58 906,972 7/31/2021
1.0.57 933,487 7/30/2021
1.0.56 874,248 7/26/2021
1.0.55 962,833 7/5/2021
1.0.54 463,265 7/1/2021
1.0.53 936,359 6/4/2021
1.0.52 964,039 4/26/2021
1.0.51 904,629 4/19/2021
1.0.50 1,022,636 4/7/2021
1.0.49 903,843 4/3/2021
1.0.48 1,051,863 3/22/2021
1.0.47 985,693 3/4/2021
1.0.46 907,022 2/26/2021
1.0.45 1,040,981 2/2/2021
1.0.44 577,472 1/24/2021
1.0.43 463,744 1/24/2021
1.0.42 463,362 1/23/2021
1.0.41 520,802 1/20/2021
1.0.40 874,161 1/20/2021
1.0.39 491,839 1/18/2021
1.0.38 463,324 1/18/2021
1.0.37 901,299 1/16/2021
1.0.36 991,113 12/16/2020
1.0.35 928,563 12/14/2020
1.0.34 906,347 12/9/2020
1.0.33 876,437 12/6/2020
1.0.32 463,741 12/2/2020
1.0.31 874,446 12/2/2020
1.0.30 902,735 12/1/2020
1.0.29 1,063,065 11/12/2020
1.0.29-atestpub 2,482 11/11/2020
1.0.28 903,770 10/11/2020
1.0.27 985,550 9/9/2020
1.0.26 902,326 9/3/2020
1.0.25 492,051 8/20/2020
1.0.24 958,018 8/9/2020
1.0.23 492,336 7/28/2020
1.0.22 491,296 7/19/2020
1.0.21 518,482 7/6/2020
1.0.20 958,460 6/6/2020
1.0.19 903,494 6/4/2020
1.0.18 519,880 5/29/2020
1.0.17 930,673 5/21/2020
1.0.16 875,296 5/17/2020
1.0.15 929,427 5/12/2020
1.0.14 983,874 5/4/2020
1.0.13 879,377 4/24/2020
1.0.12 882,100 4/22/2020
1.0.11 875,096 4/22/2020
1.0.10 875,122 4/21/2020
1.0.9 904,275 4/18/2020
1.0.8 491,336 4/16/2020
1.0.7 464,152 4/16/2020
1.0.6 897,301 4/15/2020
1.0.5 899,887 4/11/2020
1.0.4 898,786 4/3/2020
1.0.3 463,639 4/1/2020
1.0.2 885,723 3/27/2020
1.0.1 884,735 3/22/2020
1.0.0 467,020 3/22/2020