Ecng.Collections 1.0.265

There is a newer version of this package available.
See the version list below for details.
dotnet add package Ecng.Collections --version 1.0.265
                    
NuGet\Install-Package Ecng.Collections -Version 1.0.265
                    
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.265" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Ecng.Collections" Version="1.0.265" />
                    
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.265
                    
#r "nuget: Ecng.Collections, 1.0.265"
                    
#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.265
                    
#: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.265
                    
Install as a Cake Addin
#tool nuget:?package=Ecng.Collections&version=1.0.265
                    
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 (7)

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.269 0 12/26/2025
1.0.268 0 12/26/2025
1.0.267 0 12/26/2025
1.0.266 27 12/26/2025
1.0.265 124 12/25/2025
1.0.264 148 12/25/2025
1.0.263 974 12/22/2025
1.0.262 860 12/21/2025
1.0.261 930 12/19/2025
1.0.260 884 12/19/2025
1.0.259 1,066 12/17/2025
1.0.258 1,179 12/15/2025
1.0.257 901 12/15/2025
1.0.256 864 12/14/2025
1.0.255 1,965 12/12/2025
1.0.254 1,139 12/12/2025
1.0.253 743 12/12/2025
1.0.252 750 12/12/2025
1.0.251 1,100 12/12/2025
1.0.250 1,424 12/2/2025
1.0.249 1,306 12/2/2025
1.0.248 1,299 12/2/2025
1.0.247 934 11/30/2025
1.0.246 775 11/29/2025
1.0.245 762 11/28/2025
1.0.244 783 11/28/2025
1.0.243 853 11/27/2025
1.0.242 15,936 11/24/2025
1.0.241 17,688 11/24/2025
1.0.240 22,454 11/23/2025
1.0.239 27,867 11/22/2025
1.0.238 45,914 11/20/2025
1.0.237 68,947 11/18/2025
1.0.236 69,631 11/18/2025
1.0.235 112,382 11/13/2025
1.0.234 145,030 11/10/2025
1.0.233 185,710 11/1/2025
1.0.232 184,952 10/28/2025
1.0.231 184,909 10/27/2025
1.0.230 184,789 10/27/2025
1.0.229 184,721 10/25/2025
1.0.228 235,194 10/3/2025
1.0.227 235,252 9/28/2025
1.0.226 235,002 9/25/2025
1.0.225 258,688 8/30/2025
1.0.224 233,471 7/13/2025
1.0.223 224,995 7/13/2025
1.0.222 225,012 7/12/2025
1.0.221 226,241 7/8/2025
1.0.220 225,794 7/4/2025
1.0.219 225,069 7/2/2025
1.0.218 229,959 6/16/2025
1.0.217 225,232 6/9/2025
1.0.216 225,100 6/8/2025
1.0.215 226,741 5/21/2025
1.0.214 225,203 5/17/2025
1.0.213 226,820 5/12/2025
1.0.212 225,135 5/12/2025
1.0.211 227,579 4/17/2025
1.0.210 230,215 3/22/2025
1.0.209 225,103 3/20/2025
1.0.208 225,050 3/20/2025
1.0.207 225,086 3/19/2025
1.0.206 230,240 2/26/2025
1.0.205 225,165 2/26/2025
1.0.204 233,581 2/5/2025
1.0.203 229,087 1/21/2025
1.0.202 228,441 1/14/2025
1.0.201 227,284 1/12/2025
1.0.200 225,714 1/10/2025
1.0.199 229,377 12/27/2024
1.0.198 226,188 11/20/2024
1.0.197 228,673 11/18/2024
1.0.196 226,999 11/7/2024
1.0.195 226,393 10/19/2024
1.0.194 228,246 10/12/2024
1.0.193 228,800 10/5/2024
1.0.192 229,909 9/18/2024
1.0.191 225,186 9/17/2024
1.0.190 229,603 9/3/2024
1.0.189 225,250 9/1/2024
1.0.188 239,349 6/12/2024
1.0.187 228,085 5/28/2024
1.0.186 228,837 5/4/2024
1.0.185 227,519 4/23/2024
1.0.184 226,599 4/21/2024
1.0.183 225,436 4/14/2024
1.0.182 230,785 3/28/2024
1.0.181 225,374 3/17/2024
1.0.180 228,795 2/23/2024
1.0.179 225,400 2/23/2024
1.0.178 228,781 2/18/2024
1.0.177 225,373 2/18/2024
1.0.176 225,455 2/16/2024
1.0.175 227,548 2/13/2024
1.0.174 227,273 2/8/2024
1.0.173 227,717 2/5/2024
1.0.172 225,430 2/4/2024
1.0.171 227,966 1/23/2024
1.0.170 225,527 1/23/2024
1.0.169 227,239 1/12/2024
1.0.168 230,666 1/2/2024
1.0.167 225,751 12/29/2023
1.0.166 243,938 11/12/2023
1.0.165 637,060 11/10/2023
1.0.164 225,712 11/10/2023
1.0.163 636,754 11/9/2023
1.0.162 637,652 11/3/2023
1.0.161 636,595 11/1/2023
1.0.160 636,654 11/1/2023
1.0.159 661,995 9/8/2023
1.0.158 637,073 9/8/2023
1.0.157 637,315 9/3/2023
1.0.156 637,581 8/21/2023
1.0.155 226,987 8/14/2023
1.0.154 638,098 8/10/2023
1.0.153 677,745 6/29/2023
1.0.152 652,174 5/27/2023
1.0.151 226,680 5/21/2023
1.0.150 226,782 5/19/2023
1.0.149 663,166 5/8/2023
1.0.148 643,100 4/21/2023
1.0.147 688,787 4/3/2023
1.0.146 645,266 3/13/2023
1.0.145 657,105 3/6/2023
1.0.144 639,237 2/26/2023
1.0.143 243,164 2/21/2023
1.0.142 227,575 2/20/2023
1.0.141 228,842 2/15/2023
1.0.140 227,585 2/14/2023
1.0.139 671,077 2/9/2023
1.0.138 244,010 2/7/2023
1.0.137 639,101 2/4/2023
1.0.136 659,174 2/2/2023
1.0.135 655,457 1/30/2023
1.0.134 233,601 1/18/2023
1.0.133 682,831 12/30/2022
1.0.132 641,140 12/23/2022
1.0.131 659,573 12/12/2022
1.0.130 662,205 12/4/2022
1.0.129 639,656 12/4/2022
1.0.128 640,400 11/30/2022
1.0.127 228,792 11/29/2022
1.0.126 228,961 11/28/2022
1.0.125 643,889 11/18/2022
1.0.124 667,149 11/11/2022
1.0.123 639,936 11/11/2022
1.0.122 229,028 11/10/2022
1.0.121 640,208 11/5/2022
1.0.120 641,559 11/4/2022
1.0.119 663,648 11/1/2022
1.0.118 663,933 10/16/2022
1.0.117 647,193 9/10/2022
1.0.116 690,759 9/8/2022
1.0.115 640,463 9/8/2022
1.0.114 229,636 9/8/2022
1.0.113 642,802 9/4/2022
1.0.112 319,234 8/24/2022
1.0.111 649,866 8/8/2022
1.0.110 643,537 7/26/2022
1.0.109 640,675 7/26/2022
1.0.108 693,156 7/19/2022
1.0.107 274,694 7/18/2022
1.0.106 234,755 7/8/2022
1.0.105 644,888 6/18/2022
1.0.104 640,703 6/6/2022
1.0.103 737,259 4/30/2022
1.0.102 640,969 4/20/2022
1.0.101 641,022 4/10/2022
1.0.100 640,995 4/7/2022
1.0.99 640,919 4/7/2022
1.0.98 641,108 4/2/2022
1.0.97 241,477 3/29/2022
1.0.96 233,050 3/27/2022
1.0.95 516,131 1/24/2022
1.0.94 799,944 12/29/2021
1.0.93 667,212 12/20/2021
1.0.92 640,626 12/13/2021
1.0.91 696,751 12/6/2021
1.0.90 231,273 12/2/2021
1.0.89 668,344 11/29/2021
1.0.88 666,938 11/22/2021
1.0.87 228,090 11/17/2021
1.0.86 668,768 11/13/2021
1.0.85 231,533 11/10/2021
1.0.84 639,098 11/9/2021
1.0.83 290,662 11/5/2021
1.0.82 640,831 11/4/2021
1.0.81 638,983 11/4/2021
1.0.80 638,896 11/3/2021
1.0.79 639,146 10/30/2021
1.0.78 670,391 10/21/2021
1.0.77 639,572 10/17/2021
1.0.76 700,316 10/14/2021
1.0.75 650,211 10/13/2021
1.0.74 639,167 10/12/2021
1.0.73 670,801 10/11/2021
1.0.72 638,998 10/9/2021
1.0.71 674,165 10/7/2021
1.0.70 676,232 10/7/2021
1.0.69 639,119 10/7/2021
1.0.68 228,262 10/6/2021
1.0.67 639,244 9/28/2021
1.0.66 672,970 9/23/2021
1.0.65 640,874 9/10/2021
1.0.64 638,978 9/9/2021
1.0.63 638,996 9/8/2021
1.0.62 639,110 9/8/2021
1.0.61 669,884 9/6/2021
1.0.60 228,462 8/31/2021
1.0.59 228,233 8/30/2021
1.0.58 672,163 7/31/2021
1.0.57 698,691 7/30/2021
1.0.56 639,444 7/26/2021
1.0.55 728,018 7/5/2021
1.0.54 228,469 7/1/2021
1.0.53 701,526 6/4/2021
1.0.52 729,245 4/26/2021
1.0.51 669,827 4/19/2021
1.0.50 787,827 4/7/2021
1.0.49 669,032 4/3/2021
1.0.48 817,022 3/22/2021
1.0.47 750,868 3/4/2021
1.0.46 672,188 2/26/2021
1.0.45 806,168 2/2/2021
1.0.44 342,636 1/24/2021
1.0.43 228,929 1/24/2021
1.0.42 228,563 1/23/2021
1.0.41 285,982 1/20/2021
1.0.40 639,347 1/20/2021
1.0.39 257,030 1/18/2021
1.0.38 228,514 1/18/2021
1.0.37 666,496 1/16/2021
1.0.36 756,301 12/16/2020
1.0.35 693,790 12/14/2020
1.0.34 671,561 12/9/2020
1.0.33 641,642 12/6/2020
1.0.32 228,955 12/2/2020
1.0.31 639,667 12/2/2020
1.0.30 667,928 12/1/2020
1.0.29 828,254 11/12/2020
1.0.29-atestpub 2,466 11/11/2020
1.0.28 668,951 10/11/2020
1.0.27 750,727 9/9/2020
1.0.26 667,502 9/3/2020
1.0.25 257,258 8/20/2020
1.0.24 723,212 8/9/2020
1.0.23 257,535 7/28/2020
1.0.22 256,494 7/19/2020
1.0.21 283,693 7/6/2020
1.0.20 723,641 6/6/2020
1.0.19 668,698 6/4/2020
1.0.18 285,047 5/29/2020
1.0.17 695,877 5/21/2020
1.0.16 640,494 5/17/2020
1.0.15 694,634 5/12/2020
1.0.14 749,047 5/4/2020
1.0.13 644,569 4/24/2020
1.0.12 647,286 4/22/2020
1.0.11 640,289 4/22/2020
1.0.10 640,324 4/21/2020
1.0.9 669,484 4/18/2020
1.0.8 256,523 4/16/2020
1.0.7 229,349 4/16/2020
1.0.6 662,475 4/15/2020
1.0.5 665,079 4/11/2020
1.0.4 663,973 4/3/2020
1.0.3 228,832 4/1/2020
1.0.2 650,899 3/27/2020
1.0.1 649,924 3/22/2020
1.0.0 232,198 3/22/2020