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.277 417 1/14/2026
1.0.276 449 1/13/2026
1.0.275 470 1/13/2026
1.0.274 1,198 1/9/2026
1.0.273 875 1/9/2026
1.0.272 3,373 1/4/2026
1.0.271 2,258 12/30/2025
1.0.270 793 12/29/2025
1.0.269 1,216 12/26/2025
1.0.268 801 12/26/2025
1.0.267 783 12/26/2025
1.0.266 799 12/26/2025
1.0.265 857 12/25/2025
1.0.264 874 12/25/2025
1.0.263 1,371 12/22/2025
1.0.262 874 12/21/2025
1.0.261 942 12/19/2025
1.0.260 902 12/19/2025
1.0.259 1,860 12/17/2025
1.0.258 16,439 12/15/2025
1.0.257 16,350 12/15/2025
1.0.256 22,602 12/14/2025
1.0.255 43,425 12/12/2025
1.0.254 42,739 12/12/2025
1.0.253 42,348 12/12/2025
1.0.252 42,350 12/12/2025
1.0.251 43,090 12/12/2025
1.0.250 106,240 12/2/2025
1.0.249 106,471 12/2/2025
1.0.248 107,242 12/2/2025
1.0.247 122,822 11/30/2025
1.0.246 125,809 11/29/2025
1.0.245 127,987 11/28/2025
1.0.244 128,686 11/28/2025
1.0.243 132,505 11/27/2025
1.0.242 152,239 11/24/2025
1.0.241 153,991 11/24/2025
1.0.240 158,755 11/23/2025
1.0.239 164,177 11/22/2025
1.0.238 182,258 11/20/2025
1.0.237 205,260 11/18/2025
1.0.236 205,935 11/18/2025
1.0.235 248,689 11/13/2025
1.0.234 281,352 11/10/2025
1.0.233 322,011 11/1/2025
1.0.232 321,258 10/28/2025
1.0.231 321,226 10/27/2025
1.0.230 321,089 10/27/2025
1.0.229 321,023 10/25/2025
1.0.228 371,484 10/3/2025
1.0.227 371,563 9/28/2025
1.0.226 371,297 9/25/2025
1.0.225 395,230 8/30/2025
1.0.224 369,788 7/13/2025
1.0.223 361,292 7/13/2025
1.0.222 361,315 7/12/2025
1.0.221 362,574 7/8/2025
1.0.220 362,106 7/4/2025
1.0.219 361,385 7/2/2025
1.0.218 366,266 6/16/2025
1.0.217 361,537 6/9/2025
1.0.216 361,400 6/8/2025
1.0.215 363,044 5/21/2025
1.0.214 361,510 5/17/2025
1.0.213 363,114 5/12/2025
1.0.212 361,430 5/12/2025
1.0.211 363,884 4/17/2025
1.0.210 366,528 3/22/2025
1.0.209 361,399 3/20/2025
1.0.208 361,338 3/20/2025
1.0.207 361,383 3/19/2025
1.0.206 366,565 2/26/2025
1.0.205 361,463 2/26/2025
1.0.204 369,894 2/5/2025
1.0.203 365,385 1/21/2025
1.0.202 364,736 1/14/2025
1.0.201 363,577 1/12/2025
1.0.200 362,023 1/10/2025
1.0.199 365,687 12/27/2024
1.0.198 362,488 11/20/2024
1.0.197 364,974 11/18/2024
1.0.196 363,300 11/7/2024
1.0.195 362,689 10/19/2024
1.0.194 364,548 10/12/2024
1.0.193 365,095 10/5/2024
1.0.192 366,201 9/18/2024
1.0.191 361,486 9/17/2024
1.0.190 365,898 9/3/2024
1.0.189 361,547 9/1/2024
1.0.188 375,658 6/12/2024
1.0.187 364,397 5/28/2024
1.0.186 365,146 5/4/2024
1.0.185 363,830 4/23/2024
1.0.184 362,912 4/21/2024
1.0.183 361,738 4/14/2024
1.0.182 367,104 3/28/2024
1.0.181 361,682 3/17/2024
1.0.180 365,098 2/23/2024
1.0.179 361,703 2/23/2024
1.0.178 365,085 2/18/2024
1.0.177 361,672 2/18/2024
1.0.176 361,749 2/16/2024
1.0.175 363,846 2/13/2024
1.0.174 363,566 2/8/2024
1.0.173 364,030 2/5/2024
1.0.172 361,724 2/4/2024
1.0.171 364,268 1/23/2024
1.0.170 361,837 1/23/2024
1.0.169 363,541 1/12/2024
1.0.168 366,959 1/2/2024
1.0.167 362,053 12/29/2023
1.0.166 380,240 11/12/2023
1.0.165 773,358 11/10/2023
1.0.164 362,021 11/10/2023
1.0.163 773,052 11/9/2023
1.0.162 773,950 11/3/2023
1.0.161 772,886 11/1/2023
1.0.160 772,939 11/1/2023
1.0.159 798,292 9/8/2023
1.0.158 773,364 9/8/2023
1.0.157 773,609 9/3/2023
1.0.156 773,871 8/21/2023
1.0.155 363,280 8/14/2023
1.0.154 774,396 8/10/2023
1.0.153 814,048 6/29/2023
1.0.152 788,466 5/27/2023
1.0.151 362,967 5/21/2023
1.0.150 363,082 5/19/2023
1.0.149 799,458 5/8/2023
1.0.148 779,384 4/21/2023
1.0.147 825,087 4/3/2023
1.0.146 781,552 3/13/2023
1.0.145 793,392 3/6/2023
1.0.144 775,530 2/26/2023
1.0.143 379,467 2/21/2023
1.0.142 363,869 2/20/2023
1.0.141 365,131 2/15/2023
1.0.140 363,886 2/14/2023
1.0.139 807,363 2/9/2023
1.0.138 380,305 2/7/2023
1.0.137 775,412 2/4/2023
1.0.136 795,472 2/2/2023
1.0.135 791,762 1/30/2023
1.0.134 369,905 1/18/2023
1.0.133 819,118 12/30/2022
1.0.132 777,446 12/23/2022
1.0.131 795,875 12/12/2022
1.0.130 798,497 12/4/2022
1.0.129 775,952 12/4/2022
1.0.128 776,704 11/30/2022
1.0.127 365,088 11/29/2022
1.0.126 365,262 11/28/2022
1.0.125 780,181 11/18/2022
1.0.124 803,445 11/11/2022
1.0.123 776,235 11/11/2022
1.0.122 365,328 11/10/2022
1.0.121 776,512 11/5/2022
1.0.120 777,852 11/4/2022
1.0.119 799,956 11/1/2022
1.0.118 800,249 10/16/2022
1.0.117 783,495 9/10/2022
1.0.116 827,064 9/8/2022
1.0.115 776,755 9/8/2022
1.0.114 365,937 9/8/2022
1.0.113 779,094 9/4/2022
1.0.112 455,533 8/24/2022
1.0.111 786,167 8/8/2022
1.0.110 779,832 7/26/2022
1.0.109 776,987 7/26/2022
1.0.108 829,450 7/19/2022
1.0.107 410,989 7/18/2022
1.0.106 371,065 7/8/2022
1.0.105 781,189 6/18/2022
1.0.104 777,007 6/6/2022
1.0.103 873,559 4/30/2022
1.0.102 777,265 4/20/2022
1.0.101 777,317 4/10/2022
1.0.100 777,291 4/7/2022
1.0.99 777,212 4/7/2022
1.0.98 777,400 4/2/2022
1.0.97 377,778 3/29/2022
1.0.96 369,356 3/27/2022
1.0.95 652,477 1/24/2022
1.0.94 936,239 12/29/2021
1.0.93 803,514 12/20/2021
1.0.92 776,936 12/13/2021
1.0.91 833,046 12/6/2021
1.0.90 367,575 12/2/2021
1.0.89 804,634 11/29/2021
1.0.88 803,235 11/22/2021
1.0.87 364,385 11/17/2021
1.0.86 805,063 11/13/2021
1.0.85 367,827 11/10/2021
1.0.84 775,395 11/9/2021
1.0.83 426,958 11/5/2021
1.0.82 777,130 11/4/2021
1.0.81 775,288 11/4/2021
1.0.80 775,201 11/3/2021
1.0.79 775,444 10/30/2021
1.0.78 806,692 10/21/2021
1.0.77 775,872 10/17/2021
1.0.76 836,625 10/14/2021
1.0.75 786,510 10/13/2021
1.0.74 775,463 10/12/2021
1.0.73 807,114 10/11/2021
1.0.72 775,294 10/9/2021
1.0.71 810,468 10/7/2021
1.0.70 812,535 10/7/2021
1.0.69 775,415 10/7/2021
1.0.68 364,552 10/6/2021
1.0.67 775,548 9/28/2021
1.0.66 809,269 9/23/2021
1.0.65 777,169 9/10/2021
1.0.64 775,278 9/9/2021
1.0.63 775,291 9/8/2021
1.0.62 775,411 9/8/2021
1.0.61 806,174 9/6/2021
1.0.60 364,759 8/31/2021
1.0.59 364,534 8/30/2021
1.0.58 808,468 7/31/2021
1.0.57 834,984 7/30/2021
1.0.56 775,748 7/26/2021
1.0.55 864,328 7/5/2021
1.0.54 364,771 7/1/2021
1.0.53 837,854 6/4/2021
1.0.52 865,548 4/26/2021
1.0.51 806,116 4/19/2021
1.0.50 924,130 4/7/2021
1.0.49 805,330 4/3/2021
1.0.48 953,334 3/22/2021
1.0.47 887,193 3/4/2021
1.0.46 808,502 2/26/2021
1.0.45 942,485 2/2/2021
1.0.44 478,952 1/24/2021
1.0.43 365,229 1/24/2021
1.0.42 364,849 1/23/2021
1.0.41 422,270 1/20/2021
1.0.40 775,642 1/20/2021
1.0.39 393,329 1/18/2021
1.0.38 364,811 1/18/2021
1.0.37 802,796 1/16/2021
1.0.36 892,605 12/16/2020
1.0.35 830,072 12/14/2020
1.0.34 807,848 12/9/2020
1.0.33 777,924 12/6/2020
1.0.32 365,237 12/2/2020
1.0.31 775,959 12/2/2020
1.0.30 804,230 12/1/2020
1.0.29 964,555 11/12/2020
1.0.29-atestpub 2,475 11/11/2020
1.0.28 805,248 10/11/2020
1.0.27 887,028 9/9/2020
1.0.26 803,818 9/3/2020
1.0.25 393,549 8/20/2020
1.0.24 859,514 8/9/2020
1.0.23 393,830 7/28/2020
1.0.22 392,782 7/19/2020
1.0.21 419,991 7/6/2020
1.0.20 859,955 6/6/2020
1.0.19 804,994 6/4/2020
1.0.18 421,367 5/29/2020
1.0.17 832,168 5/21/2020
1.0.16 776,784 5/17/2020
1.0.15 830,932 5/12/2020
1.0.14 885,363 5/4/2020
1.0.13 780,866 4/24/2020
1.0.12 783,581 4/22/2020
1.0.11 776,595 4/22/2020
1.0.10 776,616 4/21/2020
1.0.9 805,775 4/18/2020
1.0.8 392,830 4/16/2020
1.0.7 365,642 4/16/2020
1.0.6 798,783 4/15/2020
1.0.5 801,383 4/11/2020
1.0.4 800,269 4/3/2020
1.0.3 365,127 4/1/2020
1.0.2 787,197 3/27/2020
1.0.1 786,236 3/22/2020
1.0.0 368,516 3/22/2020