Ecng.Collections 1.0.277

dotnet add package Ecng.Collections --version 1.0.277
                    
NuGet\Install-Package Ecng.Collections -Version 1.0.277
                    
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.277" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Ecng.Collections" Version="1.0.277" />
                    
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.277
                    
#r "nuget: Ecng.Collections, 1.0.277"
                    
#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.277
                    
#: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.277
                    
Install as a Cake Addin
#tool nuget:?package=Ecng.Collections&version=1.0.277
                    
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 (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.277 97 1/14/2026
1.0.276 190 1/13/2026
1.0.275 225 1/13/2026
1.0.274 891 1/9/2026
1.0.273 670 1/9/2026
1.0.272 3,048 1/4/2026
1.0.271 2,256 12/30/2025
1.0.270 792 12/29/2025
1.0.269 1,212 12/26/2025
1.0.268 800 12/26/2025
1.0.267 782 12/26/2025
1.0.266 798 12/26/2025
1.0.265 856 12/25/2025
1.0.264 873 12/25/2025
1.0.263 1,370 12/22/2025
1.0.262 872 12/21/2025
1.0.261 941 12/19/2025
1.0.260 900 12/19/2025
1.0.259 1,080 12/17/2025
1.0.258 1,190 12/15/2025
1.0.257 913 12/15/2025
1.0.256 5,333 12/14/2025
1.0.255 26,167 12/12/2025
1.0.254 25,474 12/12/2025
1.0.253 25,085 12/12/2025
1.0.252 25,089 12/12/2025
1.0.251 25,830 12/12/2025
1.0.250 88,983 12/2/2025
1.0.249 89,214 12/2/2025
1.0.248 89,984 12/2/2025
1.0.247 105,565 11/30/2025
1.0.246 108,558 11/29/2025
1.0.245 110,722 11/28/2025
1.0.244 111,427 11/28/2025
1.0.243 115,245 11/27/2025
1.0.242 134,979 11/24/2025
1.0.241 136,731 11/24/2025
1.0.240 141,496 11/23/2025
1.0.239 146,914 11/22/2025
1.0.238 164,984 11/20/2025
1.0.237 187,995 11/18/2025
1.0.236 188,676 11/18/2025
1.0.235 231,430 11/13/2025
1.0.234 264,090 11/10/2025
1.0.233 304,757 11/1/2025
1.0.232 303,996 10/28/2025
1.0.231 303,969 10/27/2025
1.0.230 303,830 10/27/2025
1.0.229 303,765 10/25/2025
1.0.228 354,232 10/3/2025
1.0.227 354,299 9/28/2025
1.0.226 354,043 9/25/2025
1.0.225 377,940 8/30/2025
1.0.224 352,523 7/13/2025
1.0.223 344,036 7/13/2025
1.0.222 344,061 7/12/2025
1.0.221 345,311 7/8/2025
1.0.220 344,849 7/4/2025
1.0.219 344,123 7/2/2025
1.0.218 349,008 6/16/2025
1.0.217 344,282 6/9/2025
1.0.216 344,146 6/8/2025
1.0.215 345,789 5/21/2025
1.0.214 344,255 5/17/2025
1.0.213 345,860 5/12/2025
1.0.212 344,175 5/12/2025
1.0.211 346,627 4/17/2025
1.0.210 349,268 3/22/2025
1.0.209 344,142 3/20/2025
1.0.208 344,085 3/20/2025
1.0.207 344,122 3/19/2025
1.0.206 349,305 2/26/2025
1.0.205 344,204 2/26/2025
1.0.204 352,626 2/5/2025
1.0.203 348,128 1/21/2025
1.0.202 347,481 1/14/2025
1.0.201 346,324 1/12/2025
1.0.200 344,764 1/10/2025
1.0.199 348,429 12/27/2024
1.0.198 345,235 11/20/2024
1.0.197 347,720 11/18/2024
1.0.196 346,048 11/7/2024
1.0.195 345,434 10/19/2024
1.0.194 347,297 10/12/2024
1.0.193 347,842 10/5/2024
1.0.192 348,945 9/18/2024
1.0.191 344,231 9/17/2024
1.0.190 348,644 9/3/2024
1.0.189 344,290 9/1/2024
1.0.188 358,400 6/12/2024
1.0.187 347,139 5/28/2024
1.0.186 347,894 5/4/2024
1.0.185 346,574 4/23/2024
1.0.184 345,659 4/21/2024
1.0.183 344,483 4/14/2024
1.0.182 349,850 3/28/2024
1.0.181 344,424 3/17/2024
1.0.180 347,840 2/23/2024
1.0.179 344,448 2/23/2024
1.0.178 347,826 2/18/2024
1.0.177 344,417 2/18/2024
1.0.176 344,491 2/16/2024
1.0.175 346,588 2/13/2024
1.0.174 346,312 2/8/2024
1.0.173 346,770 2/5/2024
1.0.172 344,468 2/4/2024
1.0.171 347,009 1/23/2024
1.0.170 344,577 1/23/2024
1.0.169 346,281 1/12/2024
1.0.168 349,701 1/2/2024
1.0.167 344,792 12/29/2023
1.0.166 362,978 11/12/2023
1.0.165 756,098 11/10/2023
1.0.164 344,758 11/10/2023
1.0.163 755,796 11/9/2023
1.0.162 756,688 11/3/2023
1.0.161 755,627 11/1/2023
1.0.160 755,678 11/1/2023
1.0.159 781,035 9/8/2023
1.0.158 756,103 9/8/2023
1.0.157 756,345 9/3/2023
1.0.156 756,614 8/21/2023
1.0.155 346,020 8/14/2023
1.0.154 757,143 8/10/2023
1.0.153 796,793 6/29/2023
1.0.152 771,214 5/27/2023
1.0.151 345,709 5/21/2023
1.0.150 345,827 5/19/2023
1.0.149 782,203 5/8/2023
1.0.148 762,133 4/21/2023
1.0.147 807,836 4/3/2023
1.0.146 764,293 3/13/2023
1.0.145 776,141 3/6/2023
1.0.144 758,272 2/26/2023
1.0.143 362,210 2/21/2023
1.0.142 346,611 2/20/2023
1.0.141 347,873 2/15/2023
1.0.140 346,632 2/14/2023
1.0.139 790,108 2/9/2023
1.0.138 363,049 2/7/2023
1.0.137 758,155 2/4/2023
1.0.136 778,215 2/2/2023
1.0.135 774,507 1/30/2023
1.0.134 352,644 1/18/2023
1.0.133 801,865 12/30/2022
1.0.132 760,183 12/23/2022
1.0.131 778,619 12/12/2022
1.0.130 781,240 12/4/2022
1.0.129 758,690 12/4/2022
1.0.128 759,445 11/30/2022
1.0.127 347,827 11/29/2022
1.0.126 348,002 11/28/2022
1.0.125 762,921 11/18/2022
1.0.124 786,183 11/11/2022
1.0.123 758,972 11/11/2022
1.0.122 348,067 11/10/2022
1.0.121 759,247 11/5/2022
1.0.120 760,594 11/4/2022
1.0.119 782,694 11/1/2022
1.0.118 782,984 10/16/2022
1.0.117 766,235 9/10/2022
1.0.116 809,803 9/8/2022
1.0.115 759,497 9/8/2022
1.0.114 348,680 9/8/2022
1.0.113 761,842 9/4/2022
1.0.112 438,278 8/24/2022
1.0.111 768,909 8/8/2022
1.0.110 762,573 7/26/2022
1.0.109 759,726 7/26/2022
1.0.108 812,196 7/19/2022
1.0.107 393,729 7/18/2022
1.0.106 353,807 7/8/2022
1.0.105 763,930 6/18/2022
1.0.104 759,746 6/6/2022
1.0.103 856,293 4/30/2022
1.0.102 760,005 4/20/2022
1.0.101 760,063 4/10/2022
1.0.100 760,031 4/7/2022
1.0.99 759,955 4/7/2022
1.0.98 760,141 4/2/2022
1.0.97 360,512 3/29/2022
1.0.96 352,095 3/27/2022
1.0.95 635,204 1/24/2022
1.0.94 918,979 12/29/2021
1.0.93 786,254 12/20/2021
1.0.92 759,671 12/13/2021
1.0.91 815,791 12/6/2021
1.0.90 350,310 12/2/2021
1.0.89 787,379 11/29/2021
1.0.88 785,972 11/22/2021
1.0.87 347,124 11/17/2021
1.0.86 787,803 11/13/2021
1.0.85 350,567 11/10/2021
1.0.84 758,136 11/9/2021
1.0.83 409,701 11/5/2021
1.0.82 759,868 11/4/2021
1.0.81 758,032 11/4/2021
1.0.80 757,939 11/3/2021
1.0.79 758,188 10/30/2021
1.0.78 789,433 10/21/2021
1.0.77 758,614 10/17/2021
1.0.76 819,366 10/14/2021
1.0.75 769,249 10/13/2021
1.0.74 758,209 10/12/2021
1.0.73 789,853 10/11/2021
1.0.72 758,041 10/9/2021
1.0.71 793,208 10/7/2021
1.0.70 795,279 10/7/2021
1.0.69 758,158 10/7/2021
1.0.68 347,299 10/6/2021
1.0.67 758,286 9/28/2021
1.0.66 792,011 9/23/2021
1.0.65 759,912 9/10/2021
1.0.64 758,015 9/9/2021
1.0.63 758,031 9/8/2021
1.0.62 758,152 9/8/2021
1.0.61 788,919 9/6/2021
1.0.60 347,500 8/31/2021
1.0.59 347,272 8/30/2021
1.0.58 791,211 7/31/2021
1.0.57 817,726 7/30/2021
1.0.56 758,490 7/26/2021
1.0.55 847,068 7/5/2021
1.0.54 347,510 7/1/2021
1.0.53 820,593 6/4/2021
1.0.52 848,286 4/26/2021
1.0.51 788,861 4/19/2021
1.0.50 906,867 4/7/2021
1.0.49 788,071 4/3/2021
1.0.48 936,075 3/22/2021
1.0.47 869,934 3/4/2021
1.0.46 791,246 2/26/2021
1.0.45 925,229 2/2/2021
1.0.44 461,689 1/24/2021
1.0.43 347,976 1/24/2021
1.0.42 347,589 1/23/2021
1.0.41 405,011 1/20/2021
1.0.40 758,383 1/20/2021
1.0.39 376,068 1/18/2021
1.0.38 347,549 1/18/2021
1.0.37 785,538 1/16/2021
1.0.36 875,347 12/16/2020
1.0.35 812,820 12/14/2020
1.0.34 790,596 12/9/2020
1.0.33 760,672 12/6/2020
1.0.32 347,985 12/2/2020
1.0.31 758,707 12/2/2020
1.0.30 786,976 12/1/2020
1.0.29 947,299 11/12/2020
1.0.29-atestpub 2,473 11/11/2020
1.0.28 787,993 10/11/2020
1.0.27 869,768 9/9/2020
1.0.26 786,562 9/3/2020
1.0.25 376,293 8/20/2020
1.0.24 842,258 8/9/2020
1.0.23 376,574 7/28/2020
1.0.22 375,527 7/19/2020
1.0.21 402,734 7/6/2020
1.0.20 842,702 6/6/2020
1.0.19 787,743 6/4/2020
1.0.18 404,112 5/29/2020
1.0.17 814,913 5/21/2020
1.0.16 759,531 5/17/2020
1.0.15 813,680 5/12/2020
1.0.14 868,104 5/4/2020
1.0.13 763,607 4/24/2020
1.0.12 766,322 4/22/2020
1.0.11 759,336 4/22/2020
1.0.10 759,358 4/21/2020
1.0.9 788,518 4/18/2020
1.0.8 375,573 4/16/2020
1.0.7 348,383 4/16/2020
1.0.6 781,519 4/15/2020
1.0.5 784,119 4/11/2020
1.0.4 783,012 4/3/2020
1.0.3 347,872 4/1/2020
1.0.2 769,933 3/27/2020
1.0.1 768,979 3/22/2020
1.0.0 351,254 3/22/2020