Ecng.Collections 1.0.263

dotnet add package Ecng.Collections --version 1.0.263
                    
NuGet\Install-Package Ecng.Collections -Version 1.0.263
                    
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.263" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Ecng.Collections" Version="1.0.263" />
                    
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.263
                    
#r "nuget: Ecng.Collections, 1.0.263"
                    
#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.263
                    
#: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.263
                    
Install as a Cake Addin
#tool nuget:?package=Ecng.Collections&version=1.0.263
                    
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.263 433 12/22/2025
1.0.262 531 12/21/2025
1.0.261 699 12/19/2025
1.0.260 663 12/19/2025
1.0.259 1,002 12/17/2025
1.0.258 1,178 12/15/2025
1.0.257 900 12/15/2025
1.0.256 862 12/14/2025
1.0.255 1,963 12/12/2025
1.0.254 1,136 12/12/2025
1.0.253 740 12/12/2025
1.0.252 746 12/12/2025
1.0.251 1,098 12/12/2025
1.0.250 1,422 12/2/2025
1.0.249 1,306 12/2/2025
1.0.248 1,299 12/2/2025
1.0.247 933 11/30/2025
1.0.246 772 11/29/2025
1.0.245 761 11/28/2025
1.0.244 781 11/28/2025
1.0.243 852 11/27/2025
1.0.242 914 11/24/2025
1.0.241 2,584 11/24/2025
1.0.240 7,290 11/23/2025
1.0.239 12,705 11/22/2025
1.0.238 30,746 11/20/2025
1.0.237 53,781 11/18/2025
1.0.236 54,466 11/18/2025
1.0.235 97,218 11/13/2025
1.0.234 129,864 11/10/2025
1.0.233 170,544 11/1/2025
1.0.232 169,786 10/28/2025
1.0.231 169,732 10/27/2025
1.0.230 169,625 10/27/2025
1.0.229 169,559 10/25/2025
1.0.228 220,026 10/3/2025
1.0.227 220,088 9/28/2025
1.0.226 219,836 9/25/2025
1.0.225 243,500 8/30/2025
1.0.224 218,300 7/13/2025
1.0.223 209,831 7/13/2025
1.0.222 209,849 7/12/2025
1.0.221 211,079 7/8/2025
1.0.220 210,635 7/4/2025
1.0.219 209,909 7/2/2025
1.0.218 214,795 6/16/2025
1.0.217 210,067 6/9/2025
1.0.216 209,939 6/8/2025
1.0.215 211,581 5/21/2025
1.0.214 210,043 5/17/2025
1.0.213 211,659 5/12/2025
1.0.212 209,974 5/12/2025
1.0.211 212,413 4/17/2025
1.0.210 215,055 3/22/2025
1.0.209 209,944 3/20/2025
1.0.208 209,890 3/20/2025
1.0.207 209,930 3/19/2025
1.0.206 215,080 2/26/2025
1.0.205 210,008 2/26/2025
1.0.204 218,421 2/5/2025
1.0.203 213,927 1/21/2025
1.0.202 213,278 1/14/2025
1.0.201 212,118 1/12/2025
1.0.200 210,553 1/10/2025
1.0.199 214,216 12/27/2024
1.0.198 211,024 11/20/2024
1.0.197 213,513 11/18/2024
1.0.196 211,838 11/7/2024
1.0.195 211,230 10/19/2024
1.0.194 213,083 10/12/2024
1.0.193 213,635 10/5/2024
1.0.192 214,741 9/18/2024
1.0.191 210,021 9/17/2024
1.0.190 214,437 9/3/2024
1.0.189 210,082 9/1/2024
1.0.188 224,183 6/12/2024
1.0.187 212,917 5/28/2024
1.0.186 213,671 5/4/2024
1.0.185 212,353 4/23/2024
1.0.184 211,437 4/21/2024
1.0.183 210,269 4/14/2024
1.0.182 215,622 3/28/2024
1.0.181 210,209 3/17/2024
1.0.180 213,630 2/23/2024
1.0.179 210,239 2/23/2024
1.0.178 213,620 2/18/2024
1.0.177 210,212 2/18/2024
1.0.176 210,292 2/16/2024
1.0.175 212,386 2/13/2024
1.0.174 212,111 2/8/2024
1.0.173 212,550 2/5/2024
1.0.172 210,268 2/4/2024
1.0.171 212,801 1/23/2024
1.0.170 210,360 1/23/2024
1.0.169 212,077 1/12/2024
1.0.168 215,500 1/2/2024
1.0.167 210,588 12/29/2023
1.0.166 228,773 11/12/2023
1.0.165 621,899 11/10/2023
1.0.164 210,546 11/10/2023
1.0.163 621,594 11/9/2023
1.0.162 622,487 11/3/2023
1.0.161 621,431 11/1/2023
1.0.160 621,493 11/1/2023
1.0.159 646,833 9/8/2023
1.0.158 621,911 9/8/2023
1.0.157 622,155 9/3/2023
1.0.156 622,416 8/21/2023
1.0.155 211,827 8/14/2023
1.0.154 622,934 8/10/2023
1.0.153 662,585 6/29/2023
1.0.152 637,010 5/27/2023
1.0.151 211,518 5/21/2023
1.0.150 211,618 5/19/2023
1.0.149 648,003 5/8/2023
1.0.148 627,933 4/21/2023
1.0.147 673,621 4/3/2023
1.0.146 630,103 3/13/2023
1.0.145 641,940 3/6/2023
1.0.144 624,069 2/26/2023
1.0.143 227,999 2/21/2023
1.0.142 212,413 2/20/2023
1.0.141 213,678 2/15/2023
1.0.140 212,422 2/14/2023
1.0.139 655,911 2/9/2023
1.0.138 228,842 2/7/2023
1.0.137 623,935 2/4/2023
1.0.136 644,009 2/2/2023
1.0.135 640,290 1/30/2023
1.0.134 218,438 1/18/2023
1.0.133 667,664 12/30/2022
1.0.132 625,975 12/23/2022
1.0.131 644,410 12/12/2022
1.0.130 647,038 12/4/2022
1.0.129 624,493 12/4/2022
1.0.128 625,235 11/30/2022
1.0.127 213,627 11/29/2022
1.0.126 213,799 11/28/2022
1.0.125 628,725 11/18/2022
1.0.124 651,982 11/11/2022
1.0.123 624,774 11/11/2022
1.0.122 213,865 11/10/2022
1.0.121 625,041 11/5/2022
1.0.120 626,392 11/4/2022
1.0.119 648,480 11/1/2022
1.0.118 648,767 10/16/2022
1.0.117 632,026 9/10/2022
1.0.116 675,592 9/8/2022
1.0.115 625,300 9/8/2022
1.0.114 214,469 9/8/2022
1.0.113 627,635 9/4/2022
1.0.112 304,065 8/24/2022
1.0.111 634,705 8/8/2022
1.0.110 628,368 7/26/2022
1.0.109 625,511 7/26/2022
1.0.108 677,989 7/19/2022
1.0.107 259,527 7/18/2022
1.0.106 219,590 7/8/2022
1.0.105 629,720 6/18/2022
1.0.104 625,535 6/6/2022
1.0.103 722,093 4/30/2022
1.0.102 625,801 4/20/2022
1.0.101 625,858 4/10/2022
1.0.100 625,827 4/7/2022
1.0.99 625,753 4/7/2022
1.0.98 625,944 4/2/2022
1.0.97 226,311 3/29/2022
1.0.96 217,884 3/27/2022
1.0.95 500,965 1/24/2022
1.0.94 784,782 12/29/2021
1.0.93 652,052 12/20/2021
1.0.92 625,465 12/13/2021
1.0.91 681,587 12/6/2021
1.0.90 216,112 12/2/2021
1.0.89 653,178 11/29/2021
1.0.88 651,776 11/22/2021
1.0.87 212,926 11/17/2021
1.0.86 653,608 11/13/2021
1.0.85 216,370 11/10/2021
1.0.84 623,932 11/9/2021
1.0.83 275,498 11/5/2021
1.0.82 625,668 11/4/2021
1.0.81 623,819 11/4/2021
1.0.80 623,727 11/3/2021
1.0.79 623,975 10/30/2021
1.0.78 655,221 10/21/2021
1.0.77 624,404 10/17/2021
1.0.76 685,148 10/14/2021
1.0.75 635,043 10/13/2021
1.0.74 623,999 10/12/2021
1.0.73 655,634 10/11/2021
1.0.72 623,831 10/9/2021
1.0.71 658,991 10/7/2021
1.0.70 661,066 10/7/2021
1.0.69 623,951 10/7/2021
1.0.68 213,097 10/6/2021
1.0.67 624,071 9/28/2021
1.0.66 657,803 9/23/2021
1.0.65 625,704 9/10/2021
1.0.64 623,813 9/9/2021
1.0.63 623,833 9/8/2021
1.0.62 623,947 9/8/2021
1.0.61 654,717 9/6/2021
1.0.60 213,297 8/31/2021
1.0.59 213,067 8/30/2021
1.0.58 656,997 7/31/2021
1.0.57 683,525 7/30/2021
1.0.56 624,278 7/26/2021
1.0.55 712,853 7/5/2021
1.0.54 213,307 7/1/2021
1.0.53 686,358 6/4/2021
1.0.52 714,079 4/26/2021
1.0.51 654,662 4/19/2021
1.0.50 772,662 4/7/2021
1.0.49 653,867 4/3/2021
1.0.48 801,855 3/22/2021
1.0.47 735,702 3/4/2021
1.0.46 657,026 2/26/2021
1.0.45 790,998 2/2/2021
1.0.44 327,469 1/24/2021
1.0.43 213,761 1/24/2021
1.0.42 213,400 1/23/2021
1.0.41 270,815 1/20/2021
1.0.40 624,181 1/20/2021
1.0.39 241,862 1/18/2021
1.0.38 213,349 1/18/2021
1.0.37 651,330 1/16/2021
1.0.36 741,127 12/16/2020
1.0.35 678,620 12/14/2020
1.0.34 656,391 12/9/2020
1.0.33 626,470 12/6/2020
1.0.32 213,787 12/2/2020
1.0.31 624,497 12/2/2020
1.0.30 652,761 12/1/2020
1.0.29 813,093 11/12/2020
1.0.29-atestpub 2,463 11/11/2020
1.0.28 653,786 10/11/2020
1.0.27 735,569 9/9/2020
1.0.26 652,340 9/3/2020
1.0.25 242,093 8/20/2020
1.0.24 708,045 8/9/2020
1.0.23 242,372 7/28/2020
1.0.22 241,330 7/19/2020
1.0.21 268,529 7/6/2020
1.0.20 708,479 6/6/2020
1.0.19 653,532 6/4/2020
1.0.18 269,884 5/29/2020
1.0.17 680,711 5/21/2020
1.0.16 625,331 5/17/2020
1.0.15 679,470 5/12/2020
1.0.14 733,883 5/4/2020
1.0.13 629,405 4/24/2020
1.0.12 632,125 4/22/2020
1.0.11 625,123 4/22/2020
1.0.10 625,157 4/21/2020
1.0.9 654,326 4/18/2020
1.0.8 241,355 4/16/2020
1.0.7 214,185 4/16/2020
1.0.6 647,310 4/15/2020
1.0.5 649,915 4/11/2020
1.0.4 648,804 4/3/2020
1.0.3 213,671 4/1/2020
1.0.2 635,733 3/27/2020
1.0.1 634,761 3/22/2020
1.0.0 217,028 3/22/2020