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 843 2/4/2026
1.0.284 1,780 2/1/2026
1.0.283 1,676 1/26/2026
1.0.282 867 1/22/2026
1.0.281 2,112 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 3,658 1/9/2026
1.0.273 4,837 1/9/2026
1.0.272 28,967 1/4/2026
1.0.271 46,039 12/30/2025
1.0.270 48,598 12/29/2025
1.0.269 67,084 12/26/2025
1.0.268 67,098 12/26/2025
1.0.267 67,140 12/26/2025
1.0.266 67,150 12/26/2025
1.0.265 72,638 12/25/2025
1.0.264 73,904 12/25/2025
1.0.263 90,609 12/22/2025
1.0.262 97,617 12/21/2025
1.0.261 105,924 12/19/2025
1.0.260 106,596 12/19/2025
1.0.259 114,973 12/17/2025
1.0.258 129,560 12/15/2025
1.0.257 129,459 12/15/2025
1.0.256 135,724 12/14/2025
1.0.255 156,539 12/12/2025
1.0.254 155,847 12/12/2025
1.0.253 155,474 12/12/2025
1.0.252 155,470 12/12/2025
1.0.251 156,217 12/12/2025
1.0.250 219,361 12/2/2025
1.0.249 219,581 12/2/2025
1.0.248 220,361 12/2/2025
1.0.247 235,925 11/30/2025
1.0.246 238,928 11/29/2025
1.0.245 241,093 11/28/2025
1.0.244 241,803 11/28/2025
1.0.243 245,611 11/27/2025
1.0.242 265,358 11/24/2025
1.0.241 267,104 11/24/2025
1.0.240 271,883 11/23/2025
1.0.239 277,291 11/22/2025
1.0.238 295,412 11/20/2025
1.0.237 318,382 11/18/2025
1.0.236 319,063 11/18/2025
1.0.235 361,814 11/13/2025
1.0.234 394,469 11/10/2025
1.0.233 435,121 11/1/2025
1.0.232 434,375 10/28/2025
1.0.231 434,340 10/27/2025
1.0.230 434,202 10/27/2025
1.0.229 434,133 10/25/2025
1.0.228 484,597 10/3/2025
1.0.227 484,664 9/28/2025
1.0.226 484,407 9/25/2025
1.0.225 508,791 8/30/2025
1.0.224 483,004 7/13/2025
1.0.223 474,401 7/13/2025
1.0.222 474,426 7/12/2025
1.0.221 475,763 7/8/2025
1.0.220 475,214 7/4/2025
1.0.219 474,499 7/2/2025
1.0.218 479,382 6/16/2025
1.0.217 474,655 6/9/2025
1.0.216 474,514 6/8/2025
1.0.215 476,164 5/21/2025
1.0.214 474,638 5/17/2025
1.0.213 476,225 5/12/2025
1.0.212 474,549 5/12/2025
1.0.211 477,064 4/17/2025
1.0.210 479,647 3/22/2025
1.0.209 474,523 3/20/2025
1.0.208 474,458 3/20/2025
1.0.207 474,495 3/19/2025
1.0.206 479,689 2/26/2025
1.0.205 474,586 2/26/2025
1.0.204 483,008 2/5/2025
1.0.203 478,507 1/21/2025
1.0.202 477,871 1/14/2025
1.0.201 476,694 1/12/2025
1.0.200 475,149 1/10/2025
1.0.199 478,831 12/27/2024
1.0.198 475,599 11/20/2024
1.0.197 478,101 11/18/2024
1.0.196 476,413 11/7/2024
1.0.195 475,812 10/19/2024
1.0.194 477,654 10/12/2024
1.0.193 478,218 10/5/2024
1.0.192 479,318 9/18/2024
1.0.191 474,604 9/17/2024
1.0.190 479,012 9/3/2024
1.0.189 474,669 9/1/2024
1.0.188 488,767 6/12/2024
1.0.187 477,522 5/28/2024
1.0.186 478,268 5/4/2024
1.0.185 476,942 4/23/2024
1.0.184 476,028 4/21/2024
1.0.183 474,852 4/14/2024
1.0.182 480,212 3/28/2024
1.0.181 474,797 3/17/2024
1.0.180 478,225 2/23/2024
1.0.179 474,817 2/23/2024
1.0.178 478,192 2/18/2024
1.0.177 474,813 2/18/2024
1.0.176 474,872 2/16/2024
1.0.175 476,954 2/13/2024
1.0.174 476,678 2/8/2024
1.0.173 477,139 2/5/2024
1.0.172 474,840 2/4/2024
1.0.171 477,392 1/23/2024
1.0.170 474,968 1/23/2024
1.0.169 476,660 1/12/2024
1.0.168 480,101 1/2/2024
1.0.167 475,191 12/29/2023
1.0.166 493,371 11/12/2023
1.0.165 886,483 11/10/2023
1.0.164 475,143 11/10/2023
1.0.163 886,175 11/9/2023
1.0.162 887,084 11/3/2023
1.0.161 886,007 11/1/2023
1.0.160 886,055 11/1/2023
1.0.159 911,416 9/8/2023
1.0.158 886,475 9/8/2023
1.0.157 886,735 9/3/2023
1.0.156 886,989 8/21/2023
1.0.155 476,396 8/14/2023
1.0.154 887,512 8/10/2023
1.0.153 927,169 6/29/2023
1.0.152 901,587 5/27/2023
1.0.151 476,085 5/21/2023
1.0.150 476,193 5/19/2023
1.0.149 912,580 5/8/2023
1.0.148 892,486 4/21/2023
1.0.147 938,206 4/3/2023
1.0.146 894,658 3/13/2023
1.0.145 906,505 3/6/2023
1.0.144 888,643 2/26/2023
1.0.143 492,574 2/21/2023
1.0.142 476,989 2/20/2023
1.0.141 478,244 2/15/2023
1.0.140 477,009 2/14/2023
1.0.139 920,465 2/9/2023
1.0.138 493,423 2/7/2023
1.0.137 888,515 2/4/2023
1.0.136 908,578 2/2/2023
1.0.135 904,866 1/30/2023
1.0.134 483,027 1/18/2023
1.0.133 932,247 12/30/2022
1.0.132 890,567 12/23/2022
1.0.131 908,980 12/12/2022
1.0.130 911,616 12/4/2022
1.0.129 889,075 12/4/2022
1.0.128 889,804 11/30/2022
1.0.127 478,200 11/29/2022
1.0.126 478,364 11/28/2022
1.0.125 893,297 11/18/2022
1.0.124 916,561 11/11/2022
1.0.123 889,348 11/11/2022
1.0.122 478,436 11/10/2022
1.0.121 889,622 11/5/2022
1.0.120 890,966 11/4/2022
1.0.119 913,072 11/1/2022
1.0.118 913,357 10/16/2022
1.0.117 896,607 9/10/2022
1.0.116 940,182 9/8/2022
1.0.115 889,877 9/8/2022
1.0.114 479,058 9/8/2022
1.0.113 892,206 9/4/2022
1.0.112 568,653 8/24/2022
1.0.111 899,278 8/8/2022
1.0.110 892,950 7/26/2022
1.0.109 890,099 7/26/2022
1.0.108 942,563 7/19/2022
1.0.107 524,117 7/18/2022
1.0.106 484,182 7/8/2022
1.0.105 894,302 6/18/2022
1.0.104 890,119 6/6/2022
1.0.103 986,677 4/30/2022
1.0.102 890,371 4/20/2022
1.0.101 890,422 4/10/2022
1.0.100 890,411 4/7/2022
1.0.99 890,327 4/7/2022
1.0.98 890,508 4/2/2022
1.0.97 490,901 3/29/2022
1.0.96 482,462 3/27/2022
1.0.95 765,708 1/24/2022
1.0.94 1,049,362 12/29/2021
1.0.93 916,630 12/20/2021
1.0.92 890,046 12/13/2021
1.0.91 946,159 12/6/2021
1.0.90 480,680 12/2/2021
1.0.89 917,749 11/29/2021
1.0.88 916,344 11/22/2021
1.0.87 477,493 11/17/2021
1.0.86 918,197 11/13/2021
1.0.85 480,940 11/10/2021
1.0.84 888,516 11/9/2021
1.0.83 540,068 11/5/2021
1.0.82 890,257 11/4/2021
1.0.81 888,387 11/4/2021
1.0.80 888,325 11/3/2021
1.0.79 888,554 10/30/2021
1.0.78 919,821 10/21/2021
1.0.77 888,989 10/17/2021
1.0.76 949,750 10/14/2021
1.0.75 899,626 10/13/2021
1.0.74 888,584 10/12/2021
1.0.73 920,228 10/11/2021
1.0.72 888,416 10/9/2021
1.0.71 923,602 10/7/2021
1.0.70 925,651 10/7/2021
1.0.69 888,527 10/7/2021
1.0.68 477,673 10/6/2021
1.0.67 888,652 9/28/2021
1.0.66 922,392 9/23/2021
1.0.65 890,281 9/10/2021
1.0.64 888,398 9/9/2021
1.0.63 888,412 9/8/2021
1.0.62 888,535 9/8/2021
1.0.61 919,296 9/6/2021
1.0.60 477,878 8/31/2021
1.0.59 477,645 8/30/2021
1.0.58 921,590 7/31/2021
1.0.57 948,098 7/30/2021
1.0.56 888,860 7/26/2021
1.0.55 977,441 7/5/2021
1.0.54 477,877 7/1/2021
1.0.53 950,970 6/4/2021
1.0.52 978,656 4/26/2021
1.0.51 919,246 4/19/2021
1.0.50 1,037,252 4/7/2021
1.0.49 918,459 4/3/2021
1.0.48 1,066,480 3/22/2021
1.0.47 1,000,313 3/4/2021
1.0.46 921,635 2/26/2021
1.0.45 1,055,597 2/2/2021
1.0.44 592,090 1/24/2021
1.0.43 478,362 1/24/2021
1.0.42 477,976 1/23/2021
1.0.41 535,415 1/20/2021
1.0.40 888,770 1/20/2021
1.0.39 506,454 1/18/2021
1.0.38 477,939 1/18/2021
1.0.37 915,909 1/16/2021
1.0.36 1,005,730 12/16/2020
1.0.35 943,182 12/14/2020
1.0.34 920,959 12/9/2020
1.0.33 891,051 12/6/2020
1.0.32 478,360 12/2/2020
1.0.31 889,065 12/2/2020
1.0.30 917,349 12/1/2020
1.0.29 1,077,684 11/12/2020
1.0.29-atestpub 2,483 11/11/2020
1.0.28 918,385 10/11/2020
1.0.27 1,000,167 9/9/2020
1.0.26 916,941 9/3/2020
1.0.25 506,669 8/20/2020
1.0.24 972,634 8/9/2020
1.0.23 506,948 7/28/2020
1.0.22 505,911 7/19/2020
1.0.21 533,100 7/6/2020
1.0.20 973,080 6/6/2020
1.0.19 918,107 6/4/2020
1.0.18 534,498 5/29/2020
1.0.17 945,290 5/21/2020
1.0.16 889,913 5/17/2020
1.0.15 944,042 5/12/2020
1.0.14 998,486 5/4/2020
1.0.13 893,989 4/24/2020
1.0.12 896,713 4/22/2020
1.0.11 889,708 4/22/2020
1.0.10 889,736 4/21/2020
1.0.9 918,889 4/18/2020
1.0.8 505,953 4/16/2020
1.0.7 478,766 4/16/2020
1.0.6 911,910 4/15/2020
1.0.5 914,503 4/11/2020
1.0.4 913,402 4/3/2020
1.0.3 478,254 4/1/2020
1.0.2 900,339 3/27/2020
1.0.1 899,347 3/22/2020
1.0.0 481,631 3/22/2020