Ecng.Collections 1.0.268

There is a newer version of this package available.
See the version list below for details.
dotnet add package Ecng.Collections --version 1.0.268
                    
NuGet\Install-Package Ecng.Collections -Version 1.0.268
                    
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.268" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Ecng.Collections" Version="1.0.268" />
                    
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.268
                    
#r "nuget: Ecng.Collections, 1.0.268"
                    
#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.268
                    
#: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.268
                    
Install as a Cake Addin
#tool nuget:?package=Ecng.Collections&version=1.0.268
                    
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 (7)

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.269 41 12/26/2025
1.0.268 36 12/26/2025
1.0.267 36 12/26/2025
1.0.266 56 12/26/2025
1.0.265 137 12/25/2025
1.0.264 160 12/25/2025
1.0.263 983 12/22/2025
1.0.262 861 12/21/2025
1.0.261 930 12/19/2025
1.0.260 884 12/19/2025
1.0.259 1,066 12/17/2025
1.0.258 1,179 12/15/2025
1.0.257 901 12/15/2025
1.0.256 864 12/14/2025
1.0.255 1,965 12/12/2025
1.0.254 1,139 12/12/2025
1.0.253 743 12/12/2025
1.0.252 750 12/12/2025
1.0.251 1,100 12/12/2025
1.0.250 1,425 12/2/2025
1.0.249 1,306 12/2/2025
1.0.248 1,299 12/2/2025
1.0.247 935 11/30/2025
1.0.246 775 11/29/2025
1.0.245 762 11/28/2025
1.0.244 783 11/28/2025
1.0.243 853 11/27/2025
1.0.242 19,606 11/24/2025
1.0.241 21,361 11/24/2025
1.0.240 26,125 11/23/2025
1.0.239 31,540 11/22/2025
1.0.238 49,587 11/20/2025
1.0.237 72,618 11/18/2025
1.0.236 73,300 11/18/2025
1.0.235 116,053 11/13/2025
1.0.234 148,704 11/10/2025
1.0.233 189,380 11/1/2025
1.0.232 188,624 10/28/2025
1.0.231 188,581 10/27/2025
1.0.230 188,456 10/27/2025
1.0.229 188,392 10/25/2025
1.0.228 238,859 10/3/2025
1.0.227 238,923 9/28/2025
1.0.226 238,669 9/25/2025
1.0.225 262,359 8/30/2025
1.0.224 237,141 7/13/2025
1.0.223 228,664 7/13/2025
1.0.222 228,685 7/12/2025
1.0.221 229,912 7/8/2025
1.0.220 229,469 7/4/2025
1.0.219 228,745 7/2/2025
1.0.218 233,636 6/16/2025
1.0.217 228,906 6/9/2025
1.0.216 228,776 6/8/2025
1.0.215 230,420 5/21/2025
1.0.214 228,880 5/17/2025
1.0.213 230,494 5/12/2025
1.0.212 228,809 5/12/2025
1.0.211 231,253 4/17/2025
1.0.210 233,888 3/22/2025
1.0.209 228,777 3/20/2025
1.0.208 228,725 3/20/2025
1.0.207 228,759 3/19/2025
1.0.206 233,915 2/26/2025
1.0.205 228,839 2/26/2025
1.0.204 237,257 2/5/2025
1.0.203 232,759 1/21/2025
1.0.202 232,117 1/14/2025
1.0.201 230,958 1/12/2025
1.0.200 229,390 1/10/2025
1.0.199 233,047 12/27/2024
1.0.198 229,860 11/20/2024
1.0.197 232,347 11/18/2024
1.0.196 230,673 11/7/2024
1.0.195 230,063 10/19/2024
1.0.194 231,919 10/12/2024
1.0.193 232,474 10/5/2024
1.0.192 233,580 9/18/2024
1.0.191 228,861 9/17/2024
1.0.190 233,275 9/3/2024
1.0.189 228,926 9/1/2024
1.0.188 243,024 6/12/2024
1.0.187 231,760 5/28/2024
1.0.186 232,510 5/4/2024
1.0.185 231,194 4/23/2024
1.0.184 230,274 4/21/2024
1.0.183 229,111 4/14/2024
1.0.182 234,459 3/28/2024
1.0.181 229,043 3/17/2024
1.0.180 232,469 2/23/2024
1.0.179 229,069 2/23/2024
1.0.178 232,450 2/18/2024
1.0.177 229,042 2/18/2024
1.0.176 229,126 2/16/2024
1.0.175 231,218 2/13/2024
1.0.174 230,948 2/8/2024
1.0.173 231,390 2/5/2024
1.0.172 229,105 2/4/2024
1.0.171 231,639 1/23/2024
1.0.170 229,204 1/23/2024
1.0.169 230,912 1/12/2024
1.0.168 234,338 1/2/2024
1.0.167 229,425 12/29/2023
1.0.166 247,611 11/12/2023
1.0.165 640,731 11/10/2023
1.0.164 229,390 11/10/2023
1.0.163 640,426 11/9/2023
1.0.162 641,326 11/3/2023
1.0.161 640,268 11/1/2023
1.0.160 640,323 11/1/2023
1.0.159 665,670 9/8/2023
1.0.158 640,746 9/8/2023
1.0.157 640,989 9/3/2023
1.0.156 641,257 8/21/2023
1.0.155 230,663 8/14/2023
1.0.154 641,775 8/10/2023
1.0.153 681,419 6/29/2023
1.0.152 655,850 5/27/2023
1.0.151 230,352 5/21/2023
1.0.150 230,457 5/19/2023
1.0.149 666,842 5/8/2023
1.0.148 646,772 4/21/2023
1.0.147 692,458 4/3/2023
1.0.146 648,941 3/13/2023
1.0.145 660,777 3/6/2023
1.0.144 642,907 2/26/2023
1.0.143 246,833 2/21/2023
1.0.142 231,248 2/20/2023
1.0.141 232,512 2/15/2023
1.0.140 231,257 2/14/2023
1.0.139 674,751 2/9/2023
1.0.138 247,682 2/7/2023
1.0.137 642,774 2/4/2023
1.0.136 662,845 2/2/2023
1.0.135 659,129 1/30/2023
1.0.134 237,275 1/18/2023
1.0.133 686,503 12/30/2022
1.0.132 644,814 12/23/2022
1.0.131 663,246 12/12/2022
1.0.130 665,877 12/4/2022
1.0.129 643,325 12/4/2022
1.0.128 644,071 11/30/2022
1.0.127 232,457 11/29/2022
1.0.126 232,634 11/28/2022
1.0.125 647,556 11/18/2022
1.0.124 670,821 11/11/2022
1.0.123 643,606 11/11/2022
1.0.122 232,701 11/10/2022
1.0.121 643,877 11/5/2022
1.0.120 645,232 11/4/2022
1.0.119 667,319 11/1/2022
1.0.118 667,606 10/16/2022
1.0.117 650,864 9/10/2022
1.0.116 694,429 9/8/2022
1.0.115 644,133 9/8/2022
1.0.114 233,309 9/8/2022
1.0.113 646,469 9/4/2022
1.0.112 322,908 8/24/2022
1.0.111 653,537 8/8/2022
1.0.110 647,209 7/26/2022
1.0.109 644,348 7/26/2022
1.0.108 696,829 7/19/2022
1.0.107 278,368 7/18/2022
1.0.106 238,432 7/8/2022
1.0.105 648,562 6/18/2022
1.0.104 644,378 6/6/2022
1.0.103 740,934 4/30/2022
1.0.102 644,644 4/20/2022
1.0.101 644,696 4/10/2022
1.0.100 644,670 4/7/2022
1.0.99 644,594 4/7/2022
1.0.98 644,784 4/2/2022
1.0.97 245,152 3/29/2022
1.0.96 236,727 3/27/2022
1.0.95 519,805 1/24/2022
1.0.94 803,619 12/29/2021
1.0.93 670,887 12/20/2021
1.0.92 644,302 12/13/2021
1.0.91 700,425 12/6/2021
1.0.90 234,947 12/2/2021
1.0.89 672,017 11/29/2021
1.0.88 670,614 11/22/2021
1.0.87 231,762 11/17/2021
1.0.86 672,440 11/13/2021
1.0.85 235,203 11/10/2021
1.0.84 642,770 11/9/2021
1.0.83 294,332 11/5/2021
1.0.82 644,505 11/4/2021
1.0.81 642,655 11/4/2021
1.0.80 642,569 11/3/2021
1.0.79 642,818 10/30/2021
1.0.78 674,063 10/21/2021
1.0.77 643,246 10/17/2021
1.0.76 703,986 10/14/2021
1.0.75 653,881 10/13/2021
1.0.74 642,838 10/12/2021
1.0.73 674,470 10/11/2021
1.0.72 642,672 10/9/2021
1.0.71 677,833 10/7/2021
1.0.70 679,907 10/7/2021
1.0.69 642,789 10/7/2021
1.0.68 231,932 10/6/2021
1.0.67 642,911 9/28/2021
1.0.66 676,642 9/23/2021
1.0.65 644,546 9/10/2021
1.0.64 642,649 9/9/2021
1.0.63 642,667 9/8/2021
1.0.62 642,783 9/8/2021
1.0.61 673,556 9/6/2021
1.0.60 232,135 8/31/2021
1.0.59 231,902 8/30/2021
1.0.58 675,835 7/31/2021
1.0.57 702,364 7/30/2021
1.0.56 643,118 7/26/2021
1.0.55 731,691 7/5/2021
1.0.54 232,145 7/1/2021
1.0.53 705,199 6/4/2021
1.0.52 732,924 4/26/2021
1.0.51 673,504 4/19/2021
1.0.50 791,506 4/7/2021
1.0.49 672,711 4/3/2021
1.0.48 820,698 3/22/2021
1.0.47 754,548 3/4/2021
1.0.46 675,868 2/26/2021
1.0.45 809,846 2/2/2021
1.0.44 346,312 1/24/2021
1.0.43 232,606 1/24/2021
1.0.42 232,234 1/23/2021
1.0.41 289,653 1/20/2021
1.0.40 643,018 1/20/2021
1.0.39 260,703 1/18/2021
1.0.38 232,185 1/18/2021
1.0.37 670,168 1/16/2021
1.0.36 759,975 12/16/2020
1.0.35 697,465 12/14/2020
1.0.34 675,233 12/9/2020
1.0.33 645,314 12/6/2020
1.0.32 232,624 12/2/2020
1.0.31 643,339 12/2/2020
1.0.30 671,602 12/1/2020
1.0.29 831,928 11/12/2020
1.0.29-atestpub 2,466 11/11/2020
1.0.28 672,624 10/11/2020
1.0.27 754,401 9/9/2020
1.0.26 671,177 9/3/2020
1.0.25 260,933 8/20/2020
1.0.24 726,887 8/9/2020
1.0.23 261,211 7/28/2020
1.0.22 260,166 7/19/2020
1.0.21 287,364 7/6/2020
1.0.20 727,314 6/6/2020
1.0.19 672,370 6/4/2020
1.0.18 288,721 5/29/2020
1.0.17 699,548 5/21/2020
1.0.16 644,163 5/17/2020
1.0.15 698,306 5/12/2020
1.0.14 752,720 5/4/2020
1.0.13 648,242 4/24/2020
1.0.12 650,961 4/22/2020
1.0.11 643,962 4/22/2020
1.0.10 643,996 4/21/2020
1.0.9 673,158 4/18/2020
1.0.8 260,198 4/16/2020
1.0.7 233,020 4/16/2020
1.0.6 666,148 4/15/2020
1.0.5 668,753 4/11/2020
1.0.4 667,649 4/3/2020
1.0.3 232,505 4/1/2020
1.0.2 654,571 3/27/2020
1.0.1 653,600 3/22/2020
1.0.0 235,872 3/22/2020