Ecng.Collections 1.0.285

dotnet add package Ecng.Collections --version 1.0.285
                    
NuGet\Install-Package Ecng.Collections -Version 1.0.285
                    
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.285" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Ecng.Collections" Version="1.0.285" />
                    
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.285
                    
#r "nuget: Ecng.Collections, 1.0.285"
                    
#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.285
                    
#: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.285
                    
Install as a Cake Addin
#tool nuget:?package=Ecng.Collections&version=1.0.285
                    
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>
{
    Lock 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.285 328 2/4/2026
1.0.284 1,624 2/1/2026
1.0.283 1,676 1/26/2026
1.0.282 866 1/22/2026
1.0.281 2,111 1/19/2026
1.0.280 838 1/19/2026
1.0.279 815 1/18/2026
1.0.278 807 1/18/2026
1.0.277 1,453 1/14/2026
1.0.276 870 1/13/2026
1.0.275 821 1/13/2026
1.0.274 1,252 1/9/2026
1.0.273 895 1/9/2026
1.0.272 16,621 1/4/2026
1.0.271 33,690 12/30/2025
1.0.270 36,250 12/29/2025
1.0.269 54,735 12/26/2025
1.0.268 54,745 12/26/2025
1.0.267 54,789 12/26/2025
1.0.266 54,795 12/26/2025
1.0.265 60,283 12/25/2025
1.0.264 61,550 12/25/2025
1.0.263 78,253 12/22/2025
1.0.262 85,263 12/21/2025
1.0.261 93,568 12/19/2025
1.0.260 94,239 12/19/2025
1.0.259 102,618 12/17/2025
1.0.258 117,200 12/15/2025
1.0.257 117,105 12/15/2025
1.0.256 123,367 12/14/2025
1.0.255 144,183 12/12/2025
1.0.254 143,495 12/12/2025
1.0.253 143,121 12/12/2025
1.0.252 143,116 12/12/2025
1.0.251 143,866 12/12/2025
1.0.250 207,007 12/2/2025
1.0.249 207,230 12/2/2025
1.0.248 208,009 12/2/2025
1.0.247 223,577 11/30/2025
1.0.246 226,580 11/29/2025
1.0.245 228,744 11/28/2025
1.0.244 229,453 11/28/2025
1.0.243 233,264 11/27/2025
1.0.242 253,011 11/24/2025
1.0.241 254,752 11/24/2025
1.0.240 259,530 11/23/2025
1.0.239 264,942 11/22/2025
1.0.238 283,058 11/20/2025
1.0.237 306,031 11/18/2025
1.0.236 306,712 11/18/2025
1.0.235 349,463 11/13/2025
1.0.234 382,118 11/10/2025
1.0.233 422,770 11/1/2025
1.0.232 422,021 10/28/2025
1.0.231 421,986 10/27/2025
1.0.230 421,851 10/27/2025
1.0.229 421,780 10/25/2025
1.0.228 472,247 10/3/2025
1.0.227 472,314 9/28/2025
1.0.226 472,057 9/25/2025
1.0.225 496,401 8/30/2025
1.0.224 470,651 7/13/2025
1.0.223 462,050 7/13/2025
1.0.222 462,069 7/12/2025
1.0.221 463,410 7/8/2025
1.0.220 462,863 7/4/2025
1.0.219 462,145 7/2/2025
1.0.218 467,029 6/16/2025
1.0.217 462,302 6/9/2025
1.0.216 462,164 6/8/2025
1.0.215 463,809 5/21/2025
1.0.214 462,286 5/17/2025
1.0.213 463,873 5/12/2025
1.0.212 462,199 5/12/2025
1.0.211 464,691 4/17/2025
1.0.210 467,295 3/22/2025
1.0.209 462,173 3/20/2025
1.0.208 462,103 3/20/2025
1.0.207 462,143 3/19/2025
1.0.206 467,337 2/26/2025
1.0.205 462,231 2/26/2025
1.0.204 470,655 2/5/2025
1.0.203 466,154 1/21/2025
1.0.202 465,519 1/14/2025
1.0.201 464,342 1/12/2025
1.0.200 462,797 1/10/2025
1.0.199 466,474 12/27/2024
1.0.198 463,247 11/20/2024
1.0.197 465,748 11/18/2024
1.0.196 464,059 11/7/2024
1.0.195 463,460 10/19/2024
1.0.194 465,301 10/12/2024
1.0.193 465,856 10/5/2024
1.0.192 466,967 9/18/2024
1.0.191 462,250 9/17/2024
1.0.190 466,660 9/3/2024
1.0.189 462,315 9/1/2024
1.0.188 476,412 6/12/2024
1.0.187 465,171 5/28/2024
1.0.186 465,919 5/4/2024
1.0.185 464,595 4/23/2024
1.0.184 463,678 4/21/2024
1.0.183 462,502 4/14/2024
1.0.182 467,865 3/28/2024
1.0.181 462,450 3/17/2024
1.0.180 465,875 2/23/2024
1.0.179 462,470 2/23/2024
1.0.178 465,842 2/18/2024
1.0.177 462,461 2/18/2024
1.0.176 462,523 2/16/2024
1.0.175 464,604 2/13/2024
1.0.174 464,328 2/8/2024
1.0.173 464,786 2/5/2024
1.0.172 462,487 2/4/2024
1.0.171 465,043 1/23/2024
1.0.170 462,618 1/23/2024
1.0.169 464,314 1/12/2024
1.0.168 467,752 1/2/2024
1.0.167 462,839 12/29/2023
1.0.166 481,020 11/12/2023
1.0.165 874,132 11/10/2023
1.0.164 462,789 11/10/2023
1.0.163 873,828 11/9/2023
1.0.162 874,731 11/3/2023
1.0.161 873,661 11/1/2023
1.0.160 873,704 11/1/2023
1.0.159 899,068 9/8/2023
1.0.158 874,127 9/8/2023
1.0.157 874,384 9/3/2023
1.0.156 874,638 8/21/2023
1.0.155 464,047 8/14/2023
1.0.154 875,159 8/10/2023
1.0.153 914,820 6/29/2023
1.0.152 889,232 5/27/2023
1.0.151 463,734 5/21/2023
1.0.150 463,840 5/19/2023
1.0.149 900,228 5/8/2023
1.0.148 880,136 4/21/2023
1.0.147 925,858 4/3/2023
1.0.146 882,303 3/13/2023
1.0.145 894,153 3/6/2023
1.0.144 876,287 2/26/2023
1.0.143 480,221 2/21/2023
1.0.142 464,634 2/20/2023
1.0.141 465,891 2/15/2023
1.0.140 464,658 2/14/2023
1.0.139 908,115 2/9/2023
1.0.138 481,073 2/7/2023
1.0.137 876,165 2/4/2023
1.0.136 896,232 2/2/2023
1.0.135 892,514 1/30/2023
1.0.134 470,677 1/18/2023
1.0.133 919,897 12/30/2022
1.0.132 878,219 12/23/2022
1.0.131 896,631 12/12/2022
1.0.130 899,268 12/4/2022
1.0.129 876,727 12/4/2022
1.0.128 877,457 11/30/2022
1.0.127 465,849 11/29/2022
1.0.126 466,014 11/28/2022
1.0.125 880,945 11/18/2022
1.0.124 904,209 11/11/2022
1.0.123 876,996 11/11/2022
1.0.122 466,082 11/10/2022
1.0.121 877,271 11/5/2022
1.0.120 878,616 11/4/2022
1.0.119 900,721 11/1/2022
1.0.118 901,006 10/16/2022
1.0.117 884,253 9/10/2022
1.0.116 927,831 9/8/2022
1.0.115 877,524 9/8/2022
1.0.114 466,708 9/8/2022
1.0.113 879,857 9/4/2022
1.0.112 556,302 8/24/2022
1.0.111 886,925 8/8/2022
1.0.110 880,599 7/26/2022
1.0.109 877,748 7/26/2022
1.0.108 930,213 7/19/2022
1.0.107 511,756 7/18/2022
1.0.106 471,831 7/8/2022
1.0.105 881,953 6/18/2022
1.0.104 877,768 6/6/2022
1.0.103 974,328 4/30/2022
1.0.102 878,021 4/20/2022
1.0.101 878,071 4/10/2022
1.0.100 878,060 4/7/2022
1.0.99 877,975 4/7/2022
1.0.98 878,160 4/2/2022
1.0.97 478,549 3/29/2022
1.0.96 470,115 3/27/2022
1.0.95 753,350 1/24/2022
1.0.94 1,037,014 12/29/2021
1.0.93 904,277 12/20/2021
1.0.92 877,697 12/13/2021
1.0.91 933,809 12/6/2021
1.0.90 468,331 12/2/2021
1.0.89 905,396 11/29/2021
1.0.88 903,990 11/22/2021
1.0.87 465,143 11/17/2021
1.0.86 905,842 11/13/2021
1.0.85 468,588 11/10/2021
1.0.84 876,162 11/9/2021
1.0.83 527,715 11/5/2021
1.0.82 877,901 11/4/2021
1.0.81 876,039 11/4/2021
1.0.80 875,974 11/3/2021
1.0.79 876,203 10/30/2021
1.0.78 907,461 10/21/2021
1.0.77 876,639 10/17/2021
1.0.76 937,399 10/14/2021
1.0.75 887,271 10/13/2021
1.0.74 876,233 10/12/2021
1.0.73 907,875 10/11/2021
1.0.72 876,061 10/9/2021
1.0.71 911,250 10/7/2021
1.0.70 913,299 10/7/2021
1.0.69 876,176 10/7/2021
1.0.68 465,316 10/6/2021
1.0.67 876,299 9/28/2021
1.0.66 910,037 9/23/2021
1.0.65 877,931 9/10/2021
1.0.64 876,045 9/9/2021
1.0.63 876,062 9/8/2021
1.0.62 876,186 9/8/2021
1.0.61 906,946 9/6/2021
1.0.60 465,525 8/31/2021
1.0.59 465,296 8/30/2021
1.0.58 909,234 7/31/2021
1.0.57 935,749 7/30/2021
1.0.56 876,510 7/26/2021
1.0.55 965,093 7/5/2021
1.0.54 465,526 7/1/2021
1.0.53 938,622 6/4/2021
1.0.52 966,301 4/26/2021
1.0.51 906,893 4/19/2021
1.0.50 1,024,899 4/7/2021
1.0.49 906,106 4/3/2021
1.0.48 1,054,125 3/22/2021
1.0.47 987,957 3/4/2021
1.0.46 909,283 2/26/2021
1.0.45 1,043,243 2/2/2021
1.0.44 579,733 1/24/2021
1.0.43 466,006 1/24/2021
1.0.42 465,625 1/23/2021
1.0.41 523,064 1/20/2021
1.0.40 876,421 1/20/2021
1.0.39 494,102 1/18/2021
1.0.38 465,588 1/18/2021
1.0.37 903,562 1/16/2021
1.0.36 993,374 12/16/2020
1.0.35 930,826 12/14/2020
1.0.34 908,608 12/9/2020
1.0.33 878,700 12/6/2020
1.0.32 466,004 12/2/2020
1.0.31 876,709 12/2/2020
1.0.30 904,997 12/1/2020
1.0.29 1,065,329 11/12/2020
1.0.29-atestpub 2,482 11/11/2020
1.0.28 906,032 10/11/2020
1.0.27 987,814 9/9/2020
1.0.26 904,589 9/3/2020
1.0.25 494,315 8/20/2020
1.0.24 960,281 8/9/2020
1.0.23 494,599 7/28/2020
1.0.22 493,560 7/19/2020
1.0.21 520,746 7/6/2020
1.0.20 960,723 6/6/2020
1.0.19 905,757 6/4/2020
1.0.18 522,143 5/29/2020
1.0.17 932,936 5/21/2020
1.0.16 877,560 5/17/2020
1.0.15 931,690 5/12/2020
1.0.14 986,137 5/4/2020
1.0.13 881,638 4/24/2020
1.0.12 884,362 4/22/2020
1.0.11 877,358 4/22/2020
1.0.10 877,384 4/21/2020
1.0.9 906,536 4/18/2020
1.0.8 493,600 4/16/2020
1.0.7 466,414 4/16/2020
1.0.6 899,564 4/15/2020
1.0.5 902,151 4/11/2020
1.0.4 901,050 4/3/2020
1.0.3 465,904 4/1/2020
1.0.2 887,987 3/27/2020
1.0.1 886,998 3/22/2020
1.0.0 469,283 3/22/2020