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 395 2/4/2026
1.0.284 1,630 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,928 1/9/2026
1.0.273 3,107 1/9/2026
1.0.272 25,574 1/4/2026
1.0.271 42,643 12/30/2025
1.0.270 45,202 12/29/2025
1.0.269 63,689 12/26/2025
1.0.268 63,698 12/26/2025
1.0.267 63,744 12/26/2025
1.0.266 63,752 12/26/2025
1.0.265 69,241 12/25/2025
1.0.264 70,508 12/25/2025
1.0.263 87,211 12/22/2025
1.0.262 94,220 12/21/2025
1.0.261 102,526 12/19/2025
1.0.260 103,198 12/19/2025
1.0.259 111,576 12/17/2025
1.0.258 126,161 12/15/2025
1.0.257 126,061 12/15/2025
1.0.256 132,327 12/14/2025
1.0.255 153,141 12/12/2025
1.0.254 152,452 12/12/2025
1.0.253 152,078 12/12/2025
1.0.252 152,074 12/12/2025
1.0.251 152,821 12/12/2025
1.0.250 215,964 12/2/2025
1.0.249 216,187 12/2/2025
1.0.248 216,965 12/2/2025
1.0.247 232,531 11/30/2025
1.0.246 235,534 11/29/2025
1.0.245 237,697 11/28/2025
1.0.244 238,408 11/28/2025
1.0.243 242,217 11/27/2025
1.0.242 261,964 11/24/2025
1.0.241 263,708 11/24/2025
1.0.240 268,485 11/23/2025
1.0.239 273,897 11/22/2025
1.0.238 292,015 11/20/2025
1.0.237 314,987 11/18/2025
1.0.236 315,667 11/18/2025
1.0.235 358,418 11/13/2025
1.0.234 391,074 11/10/2025
1.0.233 431,725 11/1/2025
1.0.232 430,978 10/28/2025
1.0.231 430,943 10/27/2025
1.0.230 430,805 10/27/2025
1.0.229 430,736 10/25/2025
1.0.228 481,202 10/3/2025
1.0.227 481,268 9/28/2025
1.0.226 481,012 9/25/2025
1.0.225 505,376 8/30/2025
1.0.224 479,608 7/13/2025
1.0.223 471,006 7/13/2025
1.0.222 471,028 7/12/2025
1.0.221 472,365 7/8/2025
1.0.220 471,817 7/4/2025
1.0.219 471,102 7/2/2025
1.0.218 475,983 6/16/2025
1.0.217 471,258 6/9/2025
1.0.216 471,116 6/8/2025
1.0.215 472,767 5/21/2025
1.0.214 471,240 5/17/2025
1.0.213 472,828 5/12/2025
1.0.212 471,153 5/12/2025
1.0.211 473,662 4/17/2025
1.0.210 476,250 3/22/2025
1.0.209 471,128 3/20/2025
1.0.208 471,060 3/20/2025
1.0.207 471,100 3/19/2025
1.0.206 476,290 2/26/2025
1.0.205 471,190 2/26/2025
1.0.204 479,609 2/5/2025
1.0.203 475,110 1/21/2025
1.0.202 474,472 1/14/2025
1.0.201 473,296 1/12/2025
1.0.200 471,750 1/10/2025
1.0.199 475,434 12/27/2024
1.0.198 472,201 11/20/2024
1.0.197 474,703 11/18/2024
1.0.196 473,015 11/7/2024
1.0.195 472,416 10/19/2024
1.0.194 474,256 10/12/2024
1.0.193 474,813 10/5/2024
1.0.192 475,923 9/18/2024
1.0.191 471,206 9/17/2024
1.0.190 475,617 9/3/2024
1.0.189 471,273 9/1/2024
1.0.188 485,372 6/12/2024
1.0.187 474,128 5/28/2024
1.0.186 474,875 5/4/2024
1.0.185 473,550 4/23/2024
1.0.184 472,635 4/21/2024
1.0.183 471,460 4/14/2024
1.0.182 476,821 3/28/2024
1.0.181 471,404 3/17/2024
1.0.180 474,832 2/23/2024
1.0.179 471,424 2/23/2024
1.0.178 474,797 2/18/2024
1.0.177 471,418 2/18/2024
1.0.176 471,475 2/16/2024
1.0.175 473,557 2/13/2024
1.0.174 473,281 2/8/2024
1.0.173 473,741 2/5/2024
1.0.172 471,441 2/4/2024
1.0.171 473,995 1/23/2024
1.0.170 471,572 1/23/2024
1.0.169 473,266 1/12/2024
1.0.168 476,706 1/2/2024
1.0.167 471,795 12/29/2023
1.0.166 489,975 11/12/2023
1.0.165 883,086 11/10/2023
1.0.164 471,745 11/10/2023
1.0.163 882,781 11/9/2023
1.0.162 883,689 11/3/2023
1.0.161 882,613 11/1/2023
1.0.160 882,661 11/1/2023
1.0.159 908,022 9/8/2023
1.0.158 883,080 9/8/2023
1.0.157 883,340 9/3/2023
1.0.156 883,597 8/21/2023
1.0.155 473,001 8/14/2023
1.0.154 884,118 8/10/2023
1.0.153 923,775 6/29/2023
1.0.152 898,191 5/27/2023
1.0.151 472,690 5/21/2023
1.0.150 472,796 5/19/2023
1.0.149 909,183 5/8/2023
1.0.148 889,092 4/21/2023
1.0.147 934,809 4/3/2023
1.0.146 891,258 3/13/2023
1.0.145 903,107 3/6/2023
1.0.144 885,240 2/26/2023
1.0.143 489,175 2/21/2023
1.0.142 473,593 2/20/2023
1.0.141 474,847 2/15/2023
1.0.140 473,612 2/14/2023
1.0.139 917,069 2/9/2023
1.0.138 490,028 2/7/2023
1.0.137 885,121 2/4/2023
1.0.136 905,185 2/2/2023
1.0.135 901,470 1/30/2023
1.0.134 479,631 1/18/2023
1.0.133 928,851 12/30/2022
1.0.132 887,174 12/23/2022
1.0.131 905,585 12/12/2022
1.0.130 908,224 12/4/2022
1.0.129 885,683 12/4/2022
1.0.128 886,411 11/30/2022
1.0.127 474,806 11/29/2022
1.0.126 474,972 11/28/2022
1.0.125 889,901 11/18/2022
1.0.124 913,166 11/11/2022
1.0.123 885,951 11/11/2022
1.0.122 475,039 11/10/2022
1.0.121 886,226 11/5/2022
1.0.120 887,571 11/4/2022
1.0.119 909,675 11/1/2022
1.0.118 909,961 10/16/2022
1.0.117 893,210 9/10/2022
1.0.116 936,786 9/8/2022
1.0.115 886,480 9/8/2022
1.0.114 475,663 9/8/2022
1.0.113 888,811 9/4/2022
1.0.112 565,258 8/24/2022
1.0.111 895,881 8/8/2022
1.0.110 889,554 7/26/2022
1.0.109 886,702 7/26/2022
1.0.108 939,167 7/19/2022
1.0.107 520,710 7/18/2022
1.0.106 480,786 7/8/2022
1.0.105 890,906 6/18/2022
1.0.104 886,722 6/6/2022
1.0.103 983,281 4/30/2022
1.0.102 886,973 4/20/2022
1.0.101 887,025 4/10/2022
1.0.100 887,014 4/7/2022
1.0.99 886,929 4/7/2022
1.0.98 887,113 4/2/2022
1.0.97 487,503 3/29/2022
1.0.96 479,068 3/27/2022
1.0.95 762,305 1/24/2022
1.0.94 1,045,968 12/29/2021
1.0.93 913,234 12/20/2021
1.0.92 886,651 12/13/2021
1.0.91 942,763 12/6/2021
1.0.90 477,288 12/2/2021
1.0.89 914,353 11/29/2021
1.0.88 912,947 11/22/2021
1.0.87 474,098 11/17/2021
1.0.86 914,797 11/13/2021
1.0.85 477,543 11/10/2021
1.0.84 885,117 11/9/2021
1.0.83 536,670 11/5/2021
1.0.82 886,857 11/4/2021
1.0.81 884,991 11/4/2021
1.0.80 884,928 11/3/2021
1.0.79 885,157 10/30/2021
1.0.78 916,415 10/21/2021
1.0.77 885,594 10/17/2021
1.0.76 946,354 10/14/2021
1.0.75 896,229 10/13/2021
1.0.74 885,189 10/12/2021
1.0.73 916,831 10/11/2021
1.0.72 885,019 10/9/2021
1.0.71 920,205 10/7/2021
1.0.70 922,256 10/7/2021
1.0.69 885,133 10/7/2021
1.0.68 474,275 10/6/2021
1.0.67 885,256 9/28/2021
1.0.66 918,995 9/23/2021
1.0.65 886,886 9/10/2021
1.0.64 885,002 9/9/2021
1.0.63 885,018 9/8/2021
1.0.62 885,139 9/8/2021
1.0.61 915,901 9/6/2021
1.0.60 474,482 8/31/2021
1.0.59 474,251 8/30/2021
1.0.58 918,192 7/31/2021
1.0.57 944,703 7/30/2021
1.0.56 885,464 7/26/2021
1.0.55 974,048 7/5/2021
1.0.54 474,482 7/1/2021
1.0.53 947,576 6/4/2021
1.0.52 975,261 4/26/2021
1.0.51 915,849 4/19/2021
1.0.50 1,033,859 4/7/2021
1.0.49 915,062 4/3/2021
1.0.48 1,063,084 3/22/2021
1.0.47 996,915 3/4/2021
1.0.46 918,238 2/26/2021
1.0.45 1,052,201 2/2/2021
1.0.44 588,692 1/24/2021
1.0.43 474,966 1/24/2021
1.0.42 474,580 1/23/2021
1.0.41 532,017 1/20/2021
1.0.40 885,374 1/20/2021
1.0.39 503,057 1/18/2021
1.0.38 474,542 1/18/2021
1.0.37 912,513 1/16/2021
1.0.36 1,002,330 12/16/2020
1.0.35 939,785 12/14/2020
1.0.34 917,561 12/9/2020
1.0.33 887,657 12/6/2020
1.0.32 474,962 12/2/2020
1.0.31 885,668 12/2/2020
1.0.30 913,954 12/1/2020
1.0.29 1,074,287 11/12/2020
1.0.29-atestpub 2,482 11/11/2020
1.0.28 914,988 10/11/2020
1.0.27 996,770 9/9/2020
1.0.26 913,545 9/3/2020
1.0.25 503,273 8/20/2020
1.0.24 969,238 8/9/2020
1.0.23 503,554 7/28/2020
1.0.22 502,515 7/19/2020
1.0.21 529,703 7/6/2020
1.0.20 969,681 6/6/2020
1.0.19 914,712 6/4/2020
1.0.18 531,102 5/29/2020
1.0.17 941,894 5/21/2020
1.0.16 886,517 5/17/2020
1.0.15 940,647 5/12/2020
1.0.14 995,091 5/4/2020
1.0.13 890,594 4/24/2020
1.0.12 893,317 4/22/2020
1.0.11 886,311 4/22/2020
1.0.10 886,339 4/21/2020
1.0.9 915,492 4/18/2020
1.0.8 502,555 4/16/2020
1.0.7 475,369 4/16/2020
1.0.6 908,518 4/15/2020
1.0.5 911,108 4/11/2020
1.0.4 910,009 4/3/2020
1.0.3 474,861 4/1/2020
1.0.2 896,944 3/27/2020
1.0.1 895,955 3/22/2020
1.0.0 478,237 3/22/2020