Ecng.Collections 1.0.274

dotnet add package Ecng.Collections --version 1.0.274
                    
NuGet\Install-Package Ecng.Collections -Version 1.0.274
                    
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.274" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Ecng.Collections" Version="1.0.274" />
                    
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.274
                    
#r "nuget: Ecng.Collections, 1.0.274"
                    
#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.274
                    
#: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.274
                    
Install as a Cake Addin
#tool nuget:?package=Ecng.Collections&version=1.0.274
                    
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 (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.274 111 1/9/2026
1.0.273 109 1/9/2026
1.0.272 1,725 1/4/2026
1.0.271 2,252 12/30/2025
1.0.270 788 12/29/2025
1.0.269 1,209 12/26/2025
1.0.268 796 12/26/2025
1.0.267 778 12/26/2025
1.0.266 795 12/26/2025
1.0.265 853 12/25/2025
1.0.264 870 12/25/2025
1.0.263 1,367 12/22/2025
1.0.262 869 12/21/2025
1.0.261 938 12/19/2025
1.0.260 897 12/19/2025
1.0.259 1,076 12/17/2025
1.0.258 1,186 12/15/2025
1.0.257 910 12/15/2025
1.0.256 879 12/14/2025
1.0.255 3,342 12/12/2025
1.0.254 2,648 12/12/2025
1.0.253 2,258 12/12/2025
1.0.252 2,263 12/12/2025
1.0.251 3,005 12/12/2025
1.0.250 66,157 12/2/2025
1.0.249 66,387 12/2/2025
1.0.248 67,159 12/2/2025
1.0.247 82,736 11/30/2025
1.0.246 85,730 11/29/2025
1.0.245 87,891 11/28/2025
1.0.244 88,599 11/28/2025
1.0.243 92,414 11/27/2025
1.0.242 112,151 11/24/2025
1.0.241 113,904 11/24/2025
1.0.240 118,669 11/23/2025
1.0.239 124,085 11/22/2025
1.0.238 142,151 11/20/2025
1.0.237 165,166 11/18/2025
1.0.236 165,846 11/18/2025
1.0.235 208,601 11/13/2025
1.0.234 241,262 11/10/2025
1.0.233 281,928 11/1/2025
1.0.232 281,167 10/28/2025
1.0.231 281,141 10/27/2025
1.0.230 281,002 10/27/2025
1.0.229 280,938 10/25/2025
1.0.228 331,403 10/3/2025
1.0.227 331,472 9/28/2025
1.0.226 331,216 9/25/2025
1.0.225 355,073 8/30/2025
1.0.224 329,692 7/13/2025
1.0.223 321,208 7/13/2025
1.0.222 321,232 7/12/2025
1.0.221 322,473 7/8/2025
1.0.220 322,023 7/4/2025
1.0.219 321,295 7/2/2025
1.0.218 326,183 6/16/2025
1.0.217 321,454 6/9/2025
1.0.216 321,320 6/8/2025
1.0.215 322,961 5/21/2025
1.0.214 321,428 5/17/2025
1.0.213 323,035 5/12/2025
1.0.212 321,347 5/12/2025
1.0.211 323,802 4/17/2025
1.0.210 326,440 3/22/2025
1.0.209 321,317 3/20/2025
1.0.208 321,259 3/20/2025
1.0.207 321,298 3/19/2025
1.0.206 326,478 2/26/2025
1.0.205 321,379 2/26/2025
1.0.204 329,800 2/5/2025
1.0.203 325,304 1/21/2025
1.0.202 324,655 1/14/2025
1.0.201 323,499 1/12/2025
1.0.200 321,937 1/10/2025
1.0.199 325,604 12/27/2024
1.0.198 322,409 11/20/2024
1.0.197 324,895 11/18/2024
1.0.196 323,221 11/7/2024
1.0.195 322,605 10/19/2024
1.0.194 324,467 10/12/2024
1.0.193 325,012 10/5/2024
1.0.192 326,120 9/18/2024
1.0.191 321,403 9/17/2024
1.0.190 325,817 9/3/2024
1.0.189 321,465 9/1/2024
1.0.188 335,571 6/12/2024
1.0.187 324,312 5/28/2024
1.0.186 325,069 5/4/2024
1.0.185 323,750 4/23/2024
1.0.184 322,833 4/21/2024
1.0.183 321,659 4/14/2024
1.0.182 327,026 3/28/2024
1.0.181 321,599 3/17/2024
1.0.180 325,011 2/23/2024
1.0.179 321,621 2/23/2024
1.0.178 324,999 2/18/2024
1.0.177 321,591 2/18/2024
1.0.176 321,664 2/16/2024
1.0.175 323,762 2/13/2024
1.0.174 323,486 2/8/2024
1.0.173 323,945 2/5/2024
1.0.172 321,644 2/4/2024
1.0.171 324,184 1/23/2024
1.0.170 321,752 1/23/2024
1.0.169 323,455 1/12/2024
1.0.168 326,875 1/2/2024
1.0.167 321,966 12/29/2023
1.0.166 340,153 11/12/2023
1.0.165 733,273 11/10/2023
1.0.164 321,933 11/10/2023
1.0.163 732,970 11/9/2023
1.0.162 733,864 11/3/2023
1.0.161 732,803 11/1/2023
1.0.160 732,855 11/1/2023
1.0.159 758,211 9/8/2023
1.0.158 733,278 9/8/2023
1.0.157 733,522 9/3/2023
1.0.156 733,792 8/21/2023
1.0.155 323,197 8/14/2023
1.0.154 734,318 8/10/2023
1.0.153 773,968 6/29/2023
1.0.152 748,389 5/27/2023
1.0.151 322,886 5/21/2023
1.0.150 323,001 5/19/2023
1.0.149 759,378 5/8/2023
1.0.148 739,310 4/21/2023
1.0.147 785,004 4/3/2023
1.0.146 741,470 3/13/2023
1.0.145 753,317 3/6/2023
1.0.144 735,447 2/26/2023
1.0.143 339,386 2/21/2023
1.0.142 323,785 2/20/2023
1.0.141 325,050 2/15/2023
1.0.140 323,798 2/14/2023
1.0.139 767,286 2/9/2023
1.0.138 340,224 2/7/2023
1.0.137 735,330 2/4/2023
1.0.136 755,391 2/2/2023
1.0.135 751,683 1/30/2023
1.0.134 329,820 1/18/2023
1.0.133 779,042 12/30/2022
1.0.132 737,360 12/23/2022
1.0.131 755,794 12/12/2022
1.0.130 758,416 12/4/2022
1.0.129 735,865 12/4/2022
1.0.128 736,622 11/30/2022
1.0.127 325,002 11/29/2022
1.0.126 325,177 11/28/2022
1.0.125 740,096 11/18/2022
1.0.124 763,361 11/11/2022
1.0.123 736,146 11/11/2022
1.0.122 325,242 11/10/2022
1.0.121 736,422 11/5/2022
1.0.120 737,767 11/4/2022
1.0.119 759,867 11/1/2022
1.0.118 760,157 10/16/2022
1.0.117 743,409 9/10/2022
1.0.116 786,975 9/8/2022
1.0.115 736,672 9/8/2022
1.0.114 325,856 9/8/2022
1.0.113 739,015 9/4/2022
1.0.112 415,451 8/24/2022
1.0.111 746,083 8/8/2022
1.0.110 739,749 7/26/2022
1.0.109 736,900 7/26/2022
1.0.108 789,370 7/19/2022
1.0.107 370,904 7/18/2022
1.0.106 330,984 7/8/2022
1.0.105 741,104 6/18/2022
1.0.104 736,913 6/6/2022
1.0.103 833,468 4/30/2022
1.0.102 737,182 4/20/2022
1.0.101 737,237 4/10/2022
1.0.100 737,207 4/7/2022
1.0.99 737,129 4/7/2022
1.0.98 737,319 4/2/2022
1.0.97 337,689 3/29/2022
1.0.96 329,269 3/27/2022
1.0.95 612,368 1/24/2022
1.0.94 896,156 12/29/2021
1.0.93 763,429 12/20/2021
1.0.92 736,845 12/13/2021
1.0.91 792,966 12/6/2021
1.0.90 327,485 12/2/2021
1.0.89 764,557 11/29/2021
1.0.88 763,148 11/22/2021
1.0.87 324,300 11/17/2021
1.0.86 764,981 11/13/2021
1.0.85 327,743 11/10/2021
1.0.84 735,312 11/9/2021
1.0.83 386,876 11/5/2021
1.0.82 737,042 11/4/2021
1.0.81 735,208 11/4/2021
1.0.80 735,115 11/3/2021
1.0.79 735,362 10/30/2021
1.0.78 766,609 10/21/2021
1.0.77 735,790 10/17/2021
1.0.76 796,544 10/14/2021
1.0.75 746,426 10/13/2021
1.0.74 735,384 10/12/2021
1.0.73 767,018 10/11/2021
1.0.72 735,216 10/9/2021
1.0.71 770,383 10/7/2021
1.0.70 772,453 10/7/2021
1.0.69 735,333 10/7/2021
1.0.68 324,473 10/6/2021
1.0.67 735,461 9/28/2021
1.0.66 769,186 9/23/2021
1.0.65 737,089 9/10/2021
1.0.64 735,191 9/9/2021
1.0.63 735,205 9/8/2021
1.0.62 735,328 9/8/2021
1.0.61 766,094 9/6/2021
1.0.60 324,678 8/31/2021
1.0.59 324,447 8/30/2021
1.0.58 768,389 7/31/2021
1.0.57 794,900 7/30/2021
1.0.56 735,667 7/26/2021
1.0.55 824,245 7/5/2021
1.0.54 324,686 7/1/2021
1.0.53 797,771 6/4/2021
1.0.52 825,463 4/26/2021
1.0.51 766,040 4/19/2021
1.0.50 884,043 4/7/2021
1.0.49 765,246 4/3/2021
1.0.48 913,239 3/22/2021
1.0.47 847,111 3/4/2021
1.0.46 768,422 2/26/2021
1.0.45 902,393 2/2/2021
1.0.44 438,852 1/24/2021
1.0.43 325,148 1/24/2021
1.0.42 324,767 1/23/2021
1.0.41 382,185 1/20/2021
1.0.40 735,559 1/20/2021
1.0.39 353,244 1/18/2021
1.0.38 324,724 1/18/2021
1.0.37 762,712 1/16/2021
1.0.36 852,522 12/16/2020
1.0.35 789,994 12/14/2020
1.0.34 767,770 12/9/2020
1.0.33 737,849 12/6/2020
1.0.32 325,159 12/2/2020
1.0.31 735,882 12/2/2020
1.0.30 764,145 12/1/2020
1.0.29 924,470 11/12/2020
1.0.29-atestpub 2,473 11/11/2020
1.0.28 765,167 10/11/2020
1.0.27 846,942 9/9/2020
1.0.26 763,728 9/3/2020
1.0.25 353,469 8/20/2020
1.0.24 819,435 8/9/2020
1.0.23 353,751 7/28/2020
1.0.22 352,704 7/19/2020
1.0.21 379,910 7/6/2020
1.0.20 819,864 6/6/2020
1.0.19 764,909 6/4/2020
1.0.18 381,284 5/29/2020
1.0.17 792,088 5/21/2020
1.0.16 736,705 5/17/2020
1.0.15 790,854 5/12/2020
1.0.14 845,276 5/4/2020
1.0.13 740,782 4/24/2020
1.0.12 743,495 4/22/2020
1.0.11 736,499 4/22/2020
1.0.10 736,535 4/21/2020
1.0.9 765,694 4/18/2020
1.0.8 352,746 4/16/2020
1.0.7 325,554 4/16/2020
1.0.6 758,693 4/15/2020
1.0.5 761,295 4/11/2020
1.0.4 760,187 4/3/2020
1.0.3 325,050 4/1/2020
1.0.2 747,108 3/27/2020
1.0.1 746,152 3/22/2020
1.0.0 328,421 3/22/2020