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 0 1/14/2026
1.0.276 82 1/13/2026
1.0.275 134 1/13/2026
1.0.274 770 1/9/2026
1.0.273 587 1/9/2026
1.0.272 2,859 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 799 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,079 12/17/2025
1.0.258 1,190 12/15/2025
1.0.257 913 12/15/2025
1.0.256 2,233 12/14/2025
1.0.255 23,068 12/12/2025
1.0.254 22,372 12/12/2025
1.0.253 21,985 12/12/2025
1.0.252 21,987 12/12/2025
1.0.251 22,731 12/12/2025
1.0.250 85,881 12/2/2025
1.0.249 86,116 12/2/2025
1.0.248 86,882 12/2/2025
1.0.247 102,461 11/30/2025
1.0.246 105,456 11/29/2025
1.0.245 107,617 11/28/2025
1.0.244 108,323 11/28/2025
1.0.243 112,138 11/27/2025
1.0.242 131,875 11/24/2025
1.0.241 133,627 11/24/2025
1.0.240 138,392 11/23/2025
1.0.239 143,811 11/22/2025
1.0.238 161,879 11/20/2025
1.0.237 184,889 11/18/2025
1.0.236 185,567 11/18/2025
1.0.235 228,323 11/13/2025
1.0.234 260,985 11/10/2025
1.0.233 301,653 11/1/2025
1.0.232 300,890 10/28/2025
1.0.231 300,865 10/27/2025
1.0.230 300,726 10/27/2025
1.0.229 300,662 10/25/2025
1.0.228 351,130 10/3/2025
1.0.227 351,198 9/28/2025
1.0.226 350,941 9/25/2025
1.0.225 374,836 8/30/2025
1.0.224 349,418 7/13/2025
1.0.223 340,937 7/13/2025
1.0.222 340,959 7/12/2025
1.0.221 342,203 7/8/2025
1.0.220 341,749 7/4/2025
1.0.219 341,022 7/2/2025
1.0.218 345,907 6/16/2025
1.0.217 341,180 6/9/2025
1.0.216 341,043 6/8/2025
1.0.215 342,686 5/21/2025
1.0.214 341,151 5/17/2025
1.0.213 342,757 5/12/2025
1.0.212 341,070 5/12/2025
1.0.211 343,524 4/17/2025
1.0.210 346,163 3/22/2025
1.0.209 341,035 3/20/2025
1.0.208 340,978 3/20/2025
1.0.207 341,016 3/19/2025
1.0.206 346,198 2/26/2025
1.0.205 341,099 2/26/2025
1.0.204 349,520 2/5/2025
1.0.203 345,025 1/21/2025
1.0.202 344,375 1/14/2025
1.0.201 343,218 1/12/2025
1.0.200 341,656 1/10/2025
1.0.199 345,323 12/27/2024
1.0.198 342,127 11/20/2024
1.0.197 344,613 11/18/2024
1.0.196 342,943 11/7/2024
1.0.195 342,328 10/19/2024
1.0.194 344,192 10/12/2024
1.0.193 344,737 10/5/2024
1.0.192 345,838 9/18/2024
1.0.191 341,126 9/17/2024
1.0.190 345,542 9/3/2024
1.0.189 341,188 9/1/2024
1.0.188 355,298 6/12/2024
1.0.187 344,039 5/28/2024
1.0.186 344,792 5/4/2024
1.0.185 343,474 4/23/2024
1.0.184 342,557 4/21/2024
1.0.183 341,383 4/14/2024
1.0.182 346,751 3/28/2024
1.0.181 341,321 3/17/2024
1.0.180 344,736 2/23/2024
1.0.179 341,347 2/23/2024
1.0.178 344,725 2/18/2024
1.0.177 341,317 2/18/2024
1.0.176 341,389 2/16/2024
1.0.175 343,486 2/13/2024
1.0.174 343,207 2/8/2024
1.0.173 343,666 2/5/2024
1.0.172 341,363 2/4/2024
1.0.171 343,906 1/23/2024
1.0.170 341,470 1/23/2024
1.0.169 343,176 1/12/2024
1.0.168 346,592 1/2/2024
1.0.167 341,682 12/29/2023
1.0.166 359,869 11/12/2023
1.0.165 752,994 11/10/2023
1.0.164 341,653 11/10/2023
1.0.163 752,691 11/9/2023
1.0.162 753,582 11/3/2023
1.0.161 752,521 11/1/2023
1.0.160 752,569 11/1/2023
1.0.159 777,926 9/8/2023
1.0.158 752,997 9/8/2023
1.0.157 753,239 9/3/2023
1.0.156 753,510 8/21/2023
1.0.155 342,916 8/14/2023
1.0.154 754,039 8/10/2023
1.0.153 793,688 6/29/2023
1.0.152 768,110 5/27/2023
1.0.151 342,606 5/21/2023
1.0.150 342,724 5/19/2023
1.0.149 779,097 5/8/2023
1.0.148 759,028 4/21/2023
1.0.147 804,732 4/3/2023
1.0.146 761,189 3/13/2023
1.0.145 773,037 3/6/2023
1.0.144 755,169 2/26/2023
1.0.143 359,108 2/21/2023
1.0.142 343,513 2/20/2023
1.0.141 344,773 2/15/2023
1.0.140 343,518 2/14/2023
1.0.139 787,009 2/9/2023
1.0.138 359,948 2/7/2023
1.0.137 755,053 2/4/2023
1.0.136 775,113 2/2/2023
1.0.135 771,401 1/30/2023
1.0.134 349,539 1/18/2023
1.0.133 798,760 12/30/2022
1.0.132 757,077 12/23/2022
1.0.131 775,512 12/12/2022
1.0.130 778,135 12/4/2022
1.0.129 755,585 12/4/2022
1.0.128 756,340 11/30/2022
1.0.127 344,722 11/29/2022
1.0.126 344,899 11/28/2022
1.0.125 759,819 11/18/2022
1.0.124 783,082 11/11/2022
1.0.123 755,866 11/11/2022
1.0.122 344,965 11/10/2022
1.0.121 756,140 11/5/2022
1.0.120 757,492 11/4/2022
1.0.119 779,586 11/1/2022
1.0.118 779,879 10/16/2022
1.0.117 763,125 9/10/2022
1.0.116 806,697 9/8/2022
1.0.115 756,390 9/8/2022
1.0.114 345,572 9/8/2022
1.0.113 758,735 9/4/2022
1.0.112 435,172 8/24/2022
1.0.111 765,807 8/8/2022
1.0.110 759,470 7/26/2022
1.0.109 756,620 7/26/2022
1.0.108 809,093 7/19/2022
1.0.107 390,626 7/18/2022
1.0.106 350,704 7/8/2022
1.0.105 760,826 6/18/2022
1.0.104 756,641 6/6/2022
1.0.103 853,189 4/30/2022
1.0.102 756,901 4/20/2022
1.0.101 756,958 4/10/2022
1.0.100 756,927 4/7/2022
1.0.99 756,849 4/7/2022
1.0.98 757,038 4/2/2022
1.0.97 357,407 3/29/2022
1.0.96 348,992 3/27/2022
1.0.95 632,101 1/24/2022
1.0.94 915,874 12/29/2021
1.0.93 783,152 12/20/2021
1.0.92 756,567 12/13/2021
1.0.91 812,688 12/6/2021
1.0.90 347,207 12/2/2021
1.0.89 784,277 11/29/2021
1.0.88 782,868 11/22/2021
1.0.87 344,022 11/17/2021
1.0.86 784,699 11/13/2021
1.0.85 347,463 11/10/2021
1.0.84 755,031 11/9/2021
1.0.83 406,596 11/5/2021
1.0.82 756,763 11/4/2021
1.0.81 754,928 11/4/2021
1.0.80 754,834 11/3/2021
1.0.79 755,085 10/30/2021
1.0.78 786,328 10/21/2021
1.0.77 755,513 10/17/2021
1.0.76 816,262 10/14/2021
1.0.75 766,142 10/13/2021
1.0.74 755,107 10/12/2021
1.0.73 786,739 10/11/2021
1.0.72 754,940 10/9/2021
1.0.71 790,105 10/7/2021
1.0.70 792,180 10/7/2021
1.0.69 755,060 10/7/2021
1.0.68 344,197 10/6/2021
1.0.67 755,188 9/28/2021
1.0.66 788,911 9/23/2021
1.0.65 756,813 9/10/2021
1.0.64 754,911 9/9/2021
1.0.63 754,932 9/8/2021
1.0.62 755,048 9/8/2021
1.0.61 785,816 9/6/2021
1.0.60 344,397 8/31/2021
1.0.59 344,171 8/30/2021
1.0.58 788,106 7/31/2021
1.0.57 814,622 7/30/2021
1.0.56 755,386 7/26/2021
1.0.55 843,964 7/5/2021
1.0.54 344,404 7/1/2021
1.0.53 817,488 6/4/2021
1.0.52 845,179 4/26/2021
1.0.51 785,754 4/19/2021
1.0.50 903,765 4/7/2021
1.0.49 784,965 4/3/2021
1.0.48 932,974 3/22/2021
1.0.47 866,833 3/4/2021
1.0.46 788,145 2/26/2021
1.0.45 922,124 2/2/2021
1.0.44 458,580 1/24/2021
1.0.43 344,872 1/24/2021
1.0.42 344,484 1/23/2021
1.0.41 401,908 1/20/2021
1.0.40 755,281 1/20/2021
1.0.39 372,965 1/18/2021
1.0.38 344,449 1/18/2021
1.0.37 782,437 1/16/2021
1.0.36 872,246 12/16/2020
1.0.35 809,718 12/14/2020
1.0.34 787,489 12/9/2020
1.0.33 757,572 12/6/2020
1.0.32 344,881 12/2/2020
1.0.31 755,604 12/2/2020
1.0.30 783,874 12/1/2020
1.0.29 944,197 11/12/2020
1.0.29-atestpub 2,473 11/11/2020
1.0.28 784,889 10/11/2020
1.0.27 866,664 9/9/2020
1.0.26 783,450 9/3/2020
1.0.25 373,191 8/20/2020
1.0.24 839,154 8/9/2020
1.0.23 373,473 7/28/2020
1.0.22 372,425 7/19/2020
1.0.21 399,630 7/6/2020
1.0.20 839,598 6/6/2020
1.0.19 784,638 6/4/2020
1.0.18 401,007 5/29/2020
1.0.17 811,810 5/21/2020
1.0.16 756,427 5/17/2020
1.0.15 810,575 5/12/2020
1.0.14 864,999 5/4/2020
1.0.13 760,506 4/24/2020
1.0.12 763,218 4/22/2020
1.0.11 756,231 4/22/2020
1.0.10 756,254 4/21/2020
1.0.9 785,417 4/18/2020
1.0.8 372,471 4/16/2020
1.0.7 345,280 4/16/2020
1.0.6 778,413 4/15/2020
1.0.5 781,016 4/11/2020
1.0.4 779,910 4/3/2020
1.0.3 344,770 4/1/2020
1.0.2 766,829 3/27/2020
1.0.1 765,879 3/22/2020
1.0.0 348,153 3/22/2020