Ecng.Collections 1.0.274

There is a newer version of this package available.
See the version list below for details.
dotnet add package Ecng.Collections --version 1.0.274
                    
NuGet\Install-Package Ecng.Collections -Version 1.0.274
                    
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.274" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Ecng.Collections" Version="1.0.274" />
                    
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.274
                    
#r "nuget: Ecng.Collections, 1.0.274"
                    
#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.274
                    
#: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.274
                    
Install as a Cake Addin
#tool nuget:?package=Ecng.Collections&version=1.0.274
                    
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 430 1/14/2026
1.0.276 451 1/13/2026
1.0.275 474 1/13/2026
1.0.274 1,198 1/9/2026
1.0.273 875 1/9/2026
1.0.272 3,374 1/4/2026
1.0.271 2,259 12/30/2025
1.0.270 793 12/29/2025
1.0.269 1,216 12/26/2025
1.0.268 801 12/26/2025
1.0.267 783 12/26/2025
1.0.266 799 12/26/2025
1.0.265 857 12/25/2025
1.0.264 874 12/25/2025
1.0.263 1,371 12/22/2025
1.0.262 874 12/21/2025
1.0.261 942 12/19/2025
1.0.260 902 12/19/2025
1.0.259 4,208 12/17/2025
1.0.258 18,789 12/15/2025
1.0.257 18,699 12/15/2025
1.0.256 24,952 12/14/2025
1.0.255 45,774 12/12/2025
1.0.254 45,089 12/12/2025
1.0.253 44,698 12/12/2025
1.0.252 44,700 12/12/2025
1.0.251 45,439 12/12/2025
1.0.250 108,590 12/2/2025
1.0.249 108,820 12/2/2025
1.0.248 109,592 12/2/2025
1.0.247 125,172 11/30/2025
1.0.246 128,158 11/29/2025
1.0.245 130,338 11/28/2025
1.0.244 131,037 11/28/2025
1.0.243 134,856 11/27/2025
1.0.242 154,591 11/24/2025
1.0.241 156,342 11/24/2025
1.0.240 161,107 11/23/2025
1.0.239 166,529 11/22/2025
1.0.238 184,612 11/20/2025
1.0.237 207,611 11/18/2025
1.0.236 208,285 11/18/2025
1.0.235 251,040 11/13/2025
1.0.234 283,703 11/10/2025
1.0.233 324,363 11/1/2025
1.0.232 323,608 10/28/2025
1.0.231 323,576 10/27/2025
1.0.230 323,439 10/27/2025
1.0.229 323,373 10/25/2025
1.0.228 373,834 10/3/2025
1.0.227 373,912 9/28/2025
1.0.226 373,646 9/25/2025
1.0.225 397,585 8/30/2025
1.0.224 372,138 7/13/2025
1.0.223 363,642 7/13/2025
1.0.222 363,663 7/12/2025
1.0.221 364,923 7/8/2025
1.0.220 364,454 7/4/2025
1.0.219 363,734 7/2/2025
1.0.218 368,614 6/16/2025
1.0.217 363,886 6/9/2025
1.0.216 363,749 6/8/2025
1.0.215 365,392 5/21/2025
1.0.214 363,859 5/17/2025
1.0.213 365,462 5/12/2025
1.0.212 363,778 5/12/2025
1.0.211 366,232 4/17/2025
1.0.210 368,876 3/22/2025
1.0.209 363,746 3/20/2025
1.0.208 363,686 3/20/2025
1.0.207 363,732 3/19/2025
1.0.206 368,913 2/26/2025
1.0.205 363,815 2/26/2025
1.0.204 372,243 2/5/2025
1.0.203 367,737 1/21/2025
1.0.202 367,087 1/14/2025
1.0.201 365,927 1/12/2025
1.0.200 364,374 1/10/2025
1.0.199 368,038 12/27/2024
1.0.198 364,840 11/20/2024
1.0.197 367,324 11/18/2024
1.0.196 365,651 11/7/2024
1.0.195 365,039 10/19/2024
1.0.194 366,899 10/12/2024
1.0.193 367,445 10/5/2024
1.0.192 368,551 9/18/2024
1.0.191 363,835 9/17/2024
1.0.190 368,248 9/3/2024
1.0.189 363,896 9/1/2024
1.0.188 378,008 6/12/2024
1.0.187 366,746 5/28/2024
1.0.186 367,496 5/4/2024
1.0.185 366,179 4/23/2024
1.0.184 365,262 4/21/2024
1.0.183 364,086 4/14/2024
1.0.182 369,453 3/28/2024
1.0.181 364,031 3/17/2024
1.0.180 367,448 2/23/2024
1.0.179 364,052 2/23/2024
1.0.178 367,435 2/18/2024
1.0.177 364,020 2/18/2024
1.0.176 364,098 2/16/2024
1.0.175 366,194 2/13/2024
1.0.174 365,916 2/8/2024
1.0.173 366,379 2/5/2024
1.0.172 364,072 2/4/2024
1.0.171 366,619 1/23/2024
1.0.170 364,188 1/23/2024
1.0.169 365,892 1/12/2024
1.0.168 369,310 1/2/2024
1.0.167 364,403 12/29/2023
1.0.166 382,591 11/12/2023
1.0.165 775,709 11/10/2023
1.0.164 364,371 11/10/2023
1.0.163 775,402 11/9/2023
1.0.162 776,301 11/3/2023
1.0.161 775,236 11/1/2023
1.0.160 775,290 11/1/2023
1.0.159 800,643 9/8/2023
1.0.158 775,713 9/8/2023
1.0.157 775,959 9/3/2023
1.0.156 776,221 8/21/2023
1.0.155 365,630 8/14/2023
1.0.154 776,746 8/10/2023
1.0.153 816,398 6/29/2023
1.0.152 790,816 5/27/2023
1.0.151 365,317 5/21/2023
1.0.150 365,431 5/19/2023
1.0.149 801,807 5/8/2023
1.0.148 781,733 4/21/2023
1.0.147 827,437 4/3/2023
1.0.146 783,901 3/13/2023
1.0.145 795,741 3/6/2023
1.0.144 777,880 2/26/2023
1.0.143 381,816 2/21/2023
1.0.142 366,218 2/20/2023
1.0.141 367,480 2/15/2023
1.0.140 366,234 2/14/2023
1.0.139 809,713 2/9/2023
1.0.138 382,655 2/7/2023
1.0.137 777,762 2/4/2023
1.0.136 797,822 2/2/2023
1.0.135 794,111 1/30/2023
1.0.134 372,256 1/18/2023
1.0.133 821,467 12/30/2022
1.0.132 779,796 12/23/2022
1.0.131 798,225 12/12/2022
1.0.130 800,848 12/4/2022
1.0.129 778,303 12/4/2022
1.0.128 779,054 11/30/2022
1.0.127 367,437 11/29/2022
1.0.126 367,611 11/28/2022
1.0.125 782,530 11/18/2022
1.0.124 805,794 11/11/2022
1.0.123 778,584 11/11/2022
1.0.122 367,677 11/10/2022
1.0.121 778,861 11/5/2022
1.0.120 780,201 11/4/2022
1.0.119 802,307 11/1/2022
1.0.118 802,599 10/16/2022
1.0.117 785,845 9/10/2022
1.0.116 829,414 9/8/2022
1.0.115 779,105 9/8/2022
1.0.114 368,287 9/8/2022
1.0.113 781,444 9/4/2022
1.0.112 457,883 8/24/2022
1.0.111 788,517 8/8/2022
1.0.110 782,181 7/26/2022
1.0.109 779,335 7/26/2022
1.0.108 831,799 7/19/2022
1.0.107 413,337 7/18/2022
1.0.106 373,413 7/8/2022
1.0.105 783,537 6/18/2022
1.0.104 779,356 6/6/2022
1.0.103 875,909 4/30/2022
1.0.102 779,616 4/20/2022
1.0.101 779,666 4/10/2022
1.0.100 779,641 4/7/2022
1.0.99 779,562 4/7/2022
1.0.98 779,750 4/2/2022
1.0.97 380,128 3/29/2022
1.0.96 371,707 3/27/2022
1.0.95 654,829 1/24/2022
1.0.94 938,589 12/29/2021
1.0.93 805,865 12/20/2021
1.0.92 779,285 12/13/2021
1.0.91 835,397 12/6/2021
1.0.90 369,926 12/2/2021
1.0.89 806,985 11/29/2021
1.0.88 805,585 11/22/2021
1.0.87 366,737 11/17/2021
1.0.86 807,415 11/13/2021
1.0.85 370,176 11/10/2021
1.0.84 777,745 11/9/2021
1.0.83 429,308 11/5/2021
1.0.82 779,480 11/4/2021
1.0.81 777,639 11/4/2021
1.0.80 777,550 11/3/2021
1.0.79 777,795 10/30/2021
1.0.78 809,043 10/21/2021
1.0.77 778,223 10/17/2021
1.0.76 838,976 10/14/2021
1.0.75 788,859 10/13/2021
1.0.74 777,813 10/12/2021
1.0.73 809,464 10/11/2021
1.0.72 777,645 10/9/2021
1.0.71 812,818 10/7/2021
1.0.70 814,884 10/7/2021
1.0.69 777,763 10/7/2021
1.0.68 366,900 10/6/2021
1.0.67 777,897 9/28/2021
1.0.66 811,620 9/23/2021
1.0.65 779,518 9/10/2021
1.0.64 777,628 9/9/2021
1.0.63 777,640 9/8/2021
1.0.62 777,762 9/8/2021
1.0.61 808,525 9/6/2021
1.0.60 367,109 8/31/2021
1.0.59 366,886 8/30/2021
1.0.58 810,820 7/31/2021
1.0.57 837,335 7/30/2021
1.0.56 778,099 7/26/2021
1.0.55 866,679 7/5/2021
1.0.54 367,122 7/1/2021
1.0.53 840,206 6/4/2021
1.0.52 867,899 4/26/2021
1.0.51 808,466 4/19/2021
1.0.50 926,480 4/7/2021
1.0.49 807,679 4/3/2021
1.0.48 955,683 3/22/2021
1.0.47 889,542 3/4/2021
1.0.46 810,852 2/26/2021
1.0.45 944,835 2/2/2021
1.0.44 481,302 1/24/2021
1.0.43 367,582 1/24/2021
1.0.42 367,198 1/23/2021
1.0.41 424,621 1/20/2021
1.0.40 777,991 1/20/2021
1.0.39 395,679 1/18/2021
1.0.38 367,161 1/18/2021
1.0.37 805,146 1/16/2021
1.0.36 894,954 12/16/2020
1.0.35 832,421 12/14/2020
1.0.34 810,197 12/9/2020
1.0.33 780,274 12/6/2020
1.0.32 367,586 12/2/2020
1.0.31 778,309 12/2/2020
1.0.30 806,579 12/1/2020
1.0.29 966,907 11/12/2020
1.0.29-atestpub 2,475 11/11/2020
1.0.28 807,598 10/11/2020
1.0.27 889,377 9/9/2020
1.0.26 806,168 9/3/2020
1.0.25 395,901 8/20/2020
1.0.24 861,863 8/9/2020
1.0.23 396,181 7/28/2020
1.0.22 395,132 7/19/2020
1.0.21 422,342 7/6/2020
1.0.20 862,306 6/6/2020
1.0.19 807,342 6/4/2020
1.0.18 423,717 5/29/2020
1.0.17 834,519 5/21/2020
1.0.16 779,135 5/17/2020
1.0.15 833,283 5/12/2020
1.0.14 887,712 5/4/2020
1.0.13 783,217 4/24/2020
1.0.12 785,933 4/22/2020
1.0.11 778,945 4/22/2020
1.0.10 778,966 4/21/2020
1.0.9 808,124 4/18/2020
1.0.8 395,180 4/16/2020
1.0.7 367,992 4/16/2020
1.0.6 801,134 4/15/2020
1.0.5 803,732 4/11/2020
1.0.4 802,618 4/3/2020
1.0.3 367,476 4/1/2020
1.0.2 789,547 3/27/2020
1.0.1 788,586 3/22/2020
1.0.0 370,868 3/22/2020