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 602 12/22/2025
1.0.262 661 12/21/2025
1.0.261 811 12/19/2025
1.0.260 757 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 863 12/14/2025
1.0.255 1,964 12/12/2025
1.0.254 1,137 12/12/2025
1.0.253 742 12/12/2025
1.0.252 747 12/12/2025
1.0.251 1,099 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 934 11/30/2025
1.0.246 773 11/29/2025
1.0.245 761 11/28/2025
1.0.244 782 11/28/2025
1.0.243 853 11/27/2025
1.0.242 4,615 11/24/2025
1.0.241 6,370 11/24/2025
1.0.240 11,134 11/23/2025
1.0.239 16,547 11/22/2025
1.0.238 34,591 11/20/2025
1.0.237 57,628 11/18/2025
1.0.236 58,310 11/18/2025
1.0.235 101,063 11/13/2025
1.0.234 133,708 11/10/2025
1.0.233 174,390 11/1/2025
1.0.232 173,631 10/28/2025
1.0.231 173,580 10/27/2025
1.0.230 173,470 10/27/2025
1.0.229 173,404 10/25/2025
1.0.228 223,880 10/3/2025
1.0.227 223,937 9/28/2025
1.0.226 223,683 9/25/2025
1.0.225 247,354 8/30/2025
1.0.224 222,147 7/13/2025
1.0.223 213,678 7/13/2025
1.0.222 213,695 7/12/2025
1.0.221 214,924 7/8/2025
1.0.220 214,480 7/4/2025
1.0.219 213,755 7/2/2025
1.0.218 218,644 6/16/2025
1.0.217 213,912 6/9/2025
1.0.216 213,783 6/8/2025
1.0.215 215,425 5/21/2025
1.0.214 213,887 5/17/2025
1.0.213 215,503 5/12/2025
1.0.212 213,818 5/12/2025
1.0.211 216,257 4/17/2025
1.0.210 218,897 3/22/2025
1.0.209 213,783 3/20/2025
1.0.208 213,730 3/20/2025
1.0.207 213,769 3/19/2025
1.0.206 218,922 2/26/2025
1.0.205 213,847 2/26/2025
1.0.204 222,263 2/5/2025
1.0.203 217,770 1/21/2025
1.0.202 217,121 1/14/2025
1.0.201 215,963 1/12/2025
1.0.200 214,395 1/10/2025
1.0.199 218,056 12/27/2024
1.0.198 214,868 11/20/2024
1.0.197 217,354 11/18/2024
1.0.196 215,681 11/7/2024
1.0.195 215,070 10/19/2024
1.0.194 216,927 10/12/2024
1.0.193 217,479 10/5/2024
1.0.192 218,589 9/18/2024
1.0.191 213,866 9/17/2024
1.0.190 218,285 9/3/2024
1.0.189 213,931 9/1/2024
1.0.188 228,031 6/12/2024
1.0.187 216,766 5/28/2024
1.0.186 217,519 5/4/2024
1.0.185 216,201 4/23/2024
1.0.184 215,282 4/21/2024
1.0.183 214,118 4/14/2024
1.0.182 219,466 3/28/2024
1.0.181 214,057 3/17/2024
1.0.180 217,477 2/23/2024
1.0.179 214,085 2/23/2024
1.0.178 217,464 2/18/2024
1.0.177 214,057 2/18/2024
1.0.176 214,139 2/16/2024
1.0.175 216,228 2/13/2024
1.0.174 215,952 2/8/2024
1.0.173 216,396 2/5/2024
1.0.172 214,113 2/4/2024
1.0.171 216,646 1/23/2024
1.0.170 214,207 1/23/2024
1.0.169 215,921 1/12/2024
1.0.168 219,346 1/2/2024
1.0.167 214,434 12/29/2023
1.0.166 232,620 11/12/2023
1.0.165 625,741 11/10/2023
1.0.164 214,391 11/10/2023
1.0.163 625,436 11/9/2023
1.0.162 626,332 11/3/2023
1.0.161 625,272 11/1/2023
1.0.160 625,336 11/1/2023
1.0.159 650,678 9/8/2023
1.0.158 625,753 9/8/2023
1.0.157 625,997 9/3/2023
1.0.156 626,260 8/21/2023
1.0.155 215,671 8/14/2023
1.0.154 626,775 8/10/2023
1.0.153 666,427 6/29/2023
1.0.152 640,856 5/27/2023
1.0.151 215,363 5/21/2023
1.0.150 215,463 5/19/2023
1.0.149 651,850 5/8/2023
1.0.148 631,781 4/21/2023
1.0.147 677,466 4/3/2023
1.0.146 633,949 3/13/2023
1.0.145 645,787 3/6/2023
1.0.144 627,914 2/26/2023
1.0.143 231,847 2/21/2023
1.0.142 216,259 2/20/2023
1.0.141 217,524 2/15/2023
1.0.140 216,268 2/14/2023
1.0.139 659,756 2/9/2023
1.0.138 232,688 2/7/2023
1.0.137 627,782 2/4/2023
1.0.136 647,852 2/2/2023
1.0.135 644,138 1/30/2023
1.0.134 222,281 1/18/2023
1.0.133 671,510 12/30/2022
1.0.132 629,820 12/23/2022
1.0.131 648,257 12/12/2022
1.0.130 650,881 12/4/2022
1.0.129 628,335 12/4/2022
1.0.128 629,079 11/30/2022
1.0.127 217,470 11/29/2022
1.0.126 217,646 11/28/2022
1.0.125 632,568 11/18/2022
1.0.124 655,828 11/11/2022
1.0.123 628,618 11/11/2022
1.0.122 217,712 11/10/2022
1.0.121 628,890 11/5/2022
1.0.120 630,239 11/4/2022
1.0.119 652,329 11/1/2022
1.0.118 652,613 10/16/2022
1.0.117 635,873 9/10/2022
1.0.116 679,440 9/8/2022
1.0.115 629,147 9/8/2022
1.0.114 218,318 9/8/2022
1.0.113 631,480 9/4/2022
1.0.112 307,912 8/24/2022
1.0.111 638,548 8/8/2022
1.0.110 632,215 7/26/2022
1.0.109 629,359 7/26/2022
1.0.108 681,835 7/19/2022
1.0.107 263,375 7/18/2022
1.0.106 223,435 7/8/2022
1.0.105 633,568 6/18/2022
1.0.104 629,385 6/6/2022
1.0.103 725,937 4/30/2022
1.0.102 629,650 4/20/2022
1.0.101 629,700 4/10/2022
1.0.100 629,673 4/7/2022
1.0.99 629,594 4/7/2022
1.0.98 629,787 4/2/2022
1.0.97 230,154 3/29/2022
1.0.96 221,729 3/27/2022
1.0.95 504,809 1/24/2022
1.0.94 788,624 12/29/2021
1.0.93 655,892 12/20/2021
1.0.92 629,308 12/13/2021
1.0.91 685,431 12/6/2021
1.0.90 219,955 12/2/2021
1.0.89 657,021 11/29/2021
1.0.88 655,616 11/22/2021
1.0.87 216,771 11/17/2021
1.0.86 657,446 11/13/2021
1.0.85 220,213 11/10/2021
1.0.84 627,776 11/9/2021
1.0.83 279,341 11/5/2021
1.0.82 629,511 11/4/2021
1.0.81 627,660 11/4/2021
1.0.80 627,574 11/3/2021
1.0.79 627,822 10/30/2021
1.0.78 659,066 10/21/2021
1.0.77 628,251 10/17/2021
1.0.76 688,996 10/14/2021
1.0.75 638,887 10/13/2021
1.0.74 627,847 10/12/2021
1.0.73 659,477 10/11/2021
1.0.72 627,675 10/9/2021
1.0.71 662,840 10/7/2021
1.0.70 664,910 10/7/2021
1.0.69 627,795 10/7/2021
1.0.68 216,941 10/6/2021
1.0.67 627,919 9/28/2021
1.0.66 661,648 9/23/2021
1.0.65 629,550 9/10/2021
1.0.64 627,659 9/9/2021
1.0.63 627,678 9/8/2021
1.0.62 627,791 9/8/2021
1.0.61 658,563 9/6/2021
1.0.60 217,143 8/31/2021
1.0.59 216,914 8/30/2021
1.0.58 660,844 7/31/2021
1.0.57 687,369 7/30/2021
1.0.56 628,124 7/26/2021
1.0.55 716,699 7/5/2021
1.0.54 217,151 7/1/2021
1.0.53 690,205 6/4/2021
1.0.52 717,925 4/26/2021
1.0.51 658,504 4/19/2021
1.0.50 776,507 4/7/2021
1.0.49 657,712 4/3/2021
1.0.48 805,701 3/22/2021
1.0.47 739,549 3/4/2021
1.0.46 660,868 2/26/2021
1.0.45 794,843 2/2/2021
1.0.44 331,311 1/24/2021
1.0.43 217,607 1/24/2021
1.0.42 217,244 1/23/2021
1.0.41 274,662 1/20/2021
1.0.40 628,028 1/20/2021
1.0.39 245,706 1/18/2021
1.0.38 217,196 1/18/2021
1.0.37 655,175 1/16/2021
1.0.36 744,976 12/16/2020
1.0.35 682,465 12/14/2020
1.0.34 660,240 12/9/2020
1.0.33 630,316 12/6/2020
1.0.32 217,634 12/2/2020
1.0.31 628,341 12/2/2020
1.0.30 656,607 12/1/2020
1.0.29 816,936 11/12/2020
1.0.29-atestpub 2,464 11/11/2020
1.0.28 657,631 10/11/2020
1.0.27 739,414 9/9/2020
1.0.26 656,187 9/3/2020
1.0.25 245,938 8/20/2020
1.0.24 711,892 8/9/2020
1.0.23 246,218 7/28/2020
1.0.22 245,177 7/19/2020
1.0.21 272,372 7/6/2020
1.0.20 712,320 6/6/2020
1.0.19 657,380 6/4/2020
1.0.18 273,727 5/29/2020
1.0.17 684,554 5/21/2020
1.0.16 629,173 5/17/2020
1.0.15 683,317 5/12/2020
1.0.14 737,727 5/4/2020
1.0.13 633,251 4/24/2020
1.0.12 635,968 4/22/2020
1.0.11 628,967 4/22/2020
1.0.10 629,004 4/21/2020
1.0.9 658,168 4/18/2020
1.0.8 245,203 4/16/2020
1.0.7 218,031 4/16/2020
1.0.6 651,154 4/15/2020
1.0.5 653,758 4/11/2020
1.0.4 652,651 4/3/2020
1.0.3 217,511 4/1/2020
1.0.2 639,580 3/27/2020
1.0.1 638,603 3/22/2020
1.0.0 220,877 3/22/2020