Ecng.Collections 1.0.271

There is a newer version of this package available.
See the version list below for details.
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 (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.281 902 1/19/2026
1.0.280 686 1/19/2026
1.0.279 664 1/18/2026
1.0.278 655 1/18/2026
1.0.277 1,319 1/14/2026
1.0.276 853 1/13/2026
1.0.275 809 1/13/2026
1.0.274 1,242 1/9/2026
1.0.273 884 1/9/2026
1.0.272 3,378 1/4/2026
1.0.271 2,262 12/30/2025
1.0.270 796 12/29/2025
1.0.269 1,219 12/26/2025
1.0.268 815 12/26/2025
1.0.267 786 12/26/2025
1.0.266 803 12/26/2025
1.0.265 860 12/25/2025
1.0.264 877 12/25/2025
1.0.263 1,516 12/22/2025
1.0.262 8,527 12/21/2025
1.0.261 16,830 12/19/2025
1.0.260 17,506 12/19/2025
1.0.259 25,882 12/17/2025
1.0.258 40,465 12/15/2025
1.0.257 40,373 12/15/2025
1.0.256 46,629 12/14/2025
1.0.255 67,449 12/12/2025
1.0.254 66,764 12/12/2025
1.0.253 66,373 12/12/2025
1.0.252 66,376 12/12/2025
1.0.251 67,115 12/12/2025
1.0.250 130,263 12/2/2025
1.0.249 130,495 12/2/2025
1.0.248 131,267 12/2/2025
1.0.247 146,844 11/30/2025
1.0.246 149,831 11/29/2025
1.0.245 152,009 11/28/2025
1.0.244 152,710 11/28/2025
1.0.243 156,534 11/27/2025
1.0.242 176,268 11/24/2025
1.0.241 178,018 11/24/2025
1.0.240 182,784 11/23/2025
1.0.239 188,205 11/22/2025
1.0.238 206,295 11/20/2025
1.0.237 229,289 11/18/2025
1.0.236 229,966 11/18/2025
1.0.235 272,718 11/13/2025
1.0.234 305,380 11/10/2025
1.0.233 346,034 11/1/2025
1.0.232 345,286 10/28/2025
1.0.231 345,246 10/27/2025
1.0.230 345,114 10/27/2025
1.0.229 345,053 10/25/2025
1.0.228 395,509 10/3/2025
1.0.227 395,586 9/28/2025
1.0.226 395,324 9/25/2025
1.0.225 419,325 8/30/2025
1.0.224 393,816 7/13/2025
1.0.223 385,317 7/13/2025
1.0.222 385,336 7/12/2025
1.0.221 386,615 7/8/2025
1.0.220 386,131 7/4/2025
1.0.219 385,408 7/2/2025
1.0.218 390,290 6/16/2025
1.0.217 385,560 6/9/2025
1.0.216 385,427 6/8/2025
1.0.215 387,064 5/21/2025
1.0.214 385,537 5/17/2025
1.0.213 387,139 5/12/2025
1.0.212 385,457 5/12/2025
1.0.211 387,912 4/17/2025
1.0.210 390,554 3/22/2025
1.0.209 385,428 3/20/2025
1.0.208 385,362 3/20/2025
1.0.207 385,408 3/19/2025
1.0.206 390,595 2/26/2025
1.0.205 385,491 2/26/2025
1.0.204 393,918 2/5/2025
1.0.203 389,413 1/21/2025
1.0.202 388,764 1/14/2025
1.0.201 387,607 1/12/2025
1.0.200 386,053 1/10/2025
1.0.199 389,718 12/27/2024
1.0.198 386,517 11/20/2024
1.0.197 388,998 11/18/2024
1.0.196 387,325 11/7/2024
1.0.195 386,715 10/19/2024
1.0.194 388,571 10/12/2024
1.0.193 389,121 10/5/2024
1.0.192 390,224 9/18/2024
1.0.191 385,507 9/17/2024
1.0.190 389,920 9/3/2024
1.0.189 385,572 9/1/2024
1.0.188 399,678 6/12/2024
1.0.187 388,421 5/28/2024
1.0.186 389,175 5/4/2024
1.0.185 387,856 4/23/2024
1.0.184 386,938 4/21/2024
1.0.183 385,762 4/14/2024
1.0.182 391,130 3/28/2024
1.0.181 385,711 3/17/2024
1.0.180 389,130 2/23/2024
1.0.179 385,731 2/23/2024
1.0.178 389,113 2/18/2024
1.0.177 385,702 2/18/2024
1.0.176 385,778 2/16/2024
1.0.175 387,872 2/13/2024
1.0.174 387,588 2/8/2024
1.0.173 388,055 2/5/2024
1.0.172 385,750 2/4/2024
1.0.171 388,297 1/23/2024
1.0.170 385,865 1/23/2024
1.0.169 387,570 1/12/2024
1.0.168 390,990 1/2/2024
1.0.167 386,083 12/29/2023
1.0.166 404,271 11/12/2023
1.0.165 797,388 11/10/2023
1.0.164 386,048 11/10/2023
1.0.163 797,081 11/9/2023
1.0.162 797,986 11/3/2023
1.0.161 796,912 11/1/2023
1.0.160 796,965 11/1/2023
1.0.159 822,318 9/8/2023
1.0.158 797,389 9/8/2023
1.0.157 797,632 9/3/2023
1.0.156 797,897 8/21/2023
1.0.155 387,300 8/14/2023
1.0.154 798,421 8/10/2023
1.0.153 838,074 6/29/2023
1.0.152 812,490 5/27/2023
1.0.151 386,993 5/21/2023
1.0.150 387,101 5/19/2023
1.0.149 823,480 5/8/2023
1.0.148 803,405 4/21/2023
1.0.147 849,110 4/3/2023
1.0.146 805,572 3/13/2023
1.0.145 817,415 3/6/2023
1.0.144 799,550 2/26/2023
1.0.143 403,489 2/21/2023
1.0.142 387,894 2/20/2023
1.0.141 389,152 2/15/2023
1.0.140 387,907 2/14/2023
1.0.139 831,382 2/9/2023
1.0.138 404,326 2/7/2023
1.0.137 799,433 2/4/2023
1.0.136 819,496 2/2/2023
1.0.135 815,783 1/30/2023
1.0.134 393,933 1/18/2023
1.0.133 843,141 12/30/2022
1.0.132 801,471 12/23/2022
1.0.131 819,901 12/12/2022
1.0.130 822,523 12/4/2022
1.0.129 799,978 12/4/2022
1.0.128 800,727 11/30/2022
1.0.127 389,114 11/29/2022
1.0.126 389,281 11/28/2022
1.0.125 804,206 11/18/2022
1.0.124 827,470 11/11/2022
1.0.123 800,263 11/11/2022
1.0.122 389,352 11/10/2022
1.0.121 800,538 11/5/2022
1.0.120 801,877 11/4/2022
1.0.119 823,983 11/1/2022
1.0.118 824,271 10/16/2022
1.0.117 807,519 9/10/2022
1.0.116 851,091 9/8/2022
1.0.115 800,778 9/8/2022
1.0.114 389,960 9/8/2022
1.0.113 803,117 9/4/2022
1.0.112 479,558 8/24/2022
1.0.111 810,189 8/8/2022
1.0.110 803,856 7/26/2022
1.0.109 801,006 7/26/2022
1.0.108 853,474 7/19/2022
1.0.107 435,011 7/18/2022
1.0.106 395,089 7/8/2022
1.0.105 805,215 6/18/2022
1.0.104 801,029 6/6/2022
1.0.103 897,588 4/30/2022
1.0.102 801,289 4/20/2022
1.0.101 801,342 4/10/2022
1.0.100 801,314 4/7/2022
1.0.99 801,240 4/7/2022
1.0.98 801,423 4/2/2022
1.0.97 401,803 3/29/2022
1.0.96 393,379 3/27/2022
1.0.95 676,515 1/24/2022
1.0.94 960,262 12/29/2021
1.0.93 827,542 12/20/2021
1.0.92 800,960 12/13/2021
1.0.91 857,075 12/6/2021
1.0.90 391,602 12/2/2021
1.0.89 828,663 11/29/2021
1.0.88 827,261 11/22/2021
1.0.87 388,412 11/17/2021
1.0.86 829,086 11/13/2021
1.0.85 391,853 11/10/2021
1.0.84 799,422 11/9/2021
1.0.83 450,981 11/5/2021
1.0.82 801,158 11/4/2021
1.0.81 799,313 11/4/2021
1.0.80 799,227 11/3/2021
1.0.79 799,472 10/30/2021
1.0.78 830,714 10/21/2021
1.0.77 799,898 10/17/2021
1.0.76 860,650 10/14/2021
1.0.75 810,537 10/13/2021
1.0.74 799,487 10/12/2021
1.0.73 831,142 10/11/2021
1.0.72 799,318 10/9/2021
1.0.71 834,497 10/7/2021
1.0.70 836,559 10/7/2021
1.0.69 799,442 10/7/2021
1.0.68 388,574 10/6/2021
1.0.67 799,568 9/28/2021
1.0.66 833,294 9/23/2021
1.0.65 801,187 9/10/2021
1.0.64 799,301 9/9/2021
1.0.63 799,312 9/8/2021
1.0.62 799,437 9/8/2021
1.0.61 830,198 9/6/2021
1.0.60 388,783 8/31/2021
1.0.59 388,559 8/30/2021
1.0.58 832,495 7/31/2021
1.0.57 859,010 7/30/2021
1.0.56 799,773 7/26/2021
1.0.55 888,353 7/5/2021
1.0.54 388,797 7/1/2021
1.0.53 861,881 6/4/2021
1.0.52 889,573 4/26/2021
1.0.51 830,141 4/19/2021
1.0.50 948,152 4/7/2021
1.0.49 829,353 4/3/2021
1.0.48 977,376 3/22/2021
1.0.47 911,217 3/4/2021
1.0.46 832,524 2/26/2021
1.0.45 966,519 2/2/2021
1.0.44 502,977 1/24/2021
1.0.43 389,258 1/24/2021
1.0.42 388,874 1/23/2021
1.0.41 446,306 1/20/2021
1.0.40 799,669 1/20/2021
1.0.39 417,355 1/18/2021
1.0.38 388,836 1/18/2021
1.0.37 826,825 1/16/2021
1.0.36 916,626 12/16/2020
1.0.35 854,095 12/14/2020
1.0.34 831,872 12/9/2020
1.0.33 801,946 12/6/2020
1.0.32 389,267 12/2/2020
1.0.31 799,976 12/2/2020
1.0.30 828,255 12/1/2020
1.0.29 988,578 11/12/2020
1.0.29-atestpub 2,475 11/11/2020
1.0.28 829,276 10/11/2020
1.0.27 911,052 9/9/2020
1.0.26 827,842 9/3/2020
1.0.25 417,574 8/20/2020
1.0.24 883,534 8/9/2020
1.0.23 417,854 7/28/2020
1.0.22 416,807 7/19/2020
1.0.21 444,014 7/6/2020
1.0.20 883,984 6/6/2020
1.0.19 829,014 6/4/2020
1.0.18 445,395 5/29/2020
1.0.17 856,196 5/21/2020
1.0.16 800,810 5/17/2020
1.0.15 854,959 5/12/2020
1.0.14 909,399 5/4/2020
1.0.13 804,892 4/24/2020
1.0.12 807,609 4/22/2020
1.0.11 800,620 4/22/2020
1.0.10 800,640 4/21/2020
1.0.9 829,800 4/18/2020
1.0.8 416,855 4/16/2020
1.0.7 389,666 4/16/2020
1.0.6 822,809 4/15/2020
1.0.5 825,407 4/11/2020
1.0.4 824,296 4/3/2020
1.0.3 389,151 4/1/2020
1.0.2 811,223 3/27/2020
1.0.1 810,258 3/22/2020
1.0.0 392,543 3/22/2020