Ecng.Collections 1.0.266

There is a newer version of this package available.
See the version list below for details.
dotnet add package Ecng.Collections --version 1.0.266
                    
NuGet\Install-Package Ecng.Collections -Version 1.0.266
                    
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.266" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Ecng.Collections" Version="1.0.266" />
                    
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.266
                    
#r "nuget: Ecng.Collections, 1.0.266"
                    
#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.266
                    
#: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.266
                    
Install as a Cake Addin
#tool nuget:?package=Ecng.Collections&version=1.0.266
                    
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 0 12/26/2025
1.0.265 74 12/25/2025
1.0.264 99 12/25/2025
1.0.263 927 12/22/2025
1.0.262 824 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 863 12/14/2025
1.0.255 1,965 12/12/2025
1.0.254 1,138 12/12/2025
1.0.253 742 12/12/2025
1.0.252 748 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 774 11/29/2025
1.0.245 762 11/28/2025
1.0.244 782 11/28/2025
1.0.243 853 11/27/2025
1.0.242 12,494 11/24/2025
1.0.241 14,247 11/24/2025
1.0.240 19,013 11/23/2025
1.0.239 24,426 11/22/2025
1.0.238 42,471 11/20/2025
1.0.237 65,506 11/18/2025
1.0.236 66,190 11/18/2025
1.0.235 108,941 11/13/2025
1.0.234 141,588 11/10/2025
1.0.233 182,269 11/1/2025
1.0.232 181,510 10/28/2025
1.0.231 181,462 10/27/2025
1.0.230 181,346 10/27/2025
1.0.229 181,280 10/25/2025
1.0.228 231,753 10/3/2025
1.0.227 231,810 9/28/2025
1.0.226 231,560 9/25/2025
1.0.225 255,239 8/30/2025
1.0.224 230,030 7/13/2025
1.0.223 221,554 7/13/2025
1.0.222 221,570 7/12/2025
1.0.221 222,800 7/8/2025
1.0.220 222,353 7/4/2025
1.0.219 221,628 7/2/2025
1.0.218 226,518 6/16/2025
1.0.217 221,791 6/9/2025
1.0.216 221,659 6/8/2025
1.0.215 223,300 5/21/2025
1.0.214 221,762 5/17/2025
1.0.213 223,378 5/12/2025
1.0.212 221,694 5/12/2025
1.0.211 224,138 4/17/2025
1.0.210 226,774 3/22/2025
1.0.209 221,662 3/20/2025
1.0.208 221,608 3/20/2025
1.0.207 221,645 3/19/2025
1.0.206 226,799 2/26/2025
1.0.205 221,724 2/26/2025
1.0.204 230,140 2/5/2025
1.0.203 225,646 1/21/2025
1.0.202 225,000 1/14/2025
1.0.201 223,842 1/12/2025
1.0.200 222,272 1/10/2025
1.0.199 225,935 12/27/2024
1.0.198 222,746 11/20/2024
1.0.197 225,232 11/18/2024
1.0.196 223,558 11/7/2024
1.0.195 222,952 10/19/2024
1.0.194 224,805 10/12/2024
1.0.193 225,358 10/5/2024
1.0.192 226,468 9/18/2024
1.0.191 221,745 9/17/2024
1.0.190 226,162 9/3/2024
1.0.189 221,809 9/1/2024
1.0.188 235,907 6/12/2024
1.0.187 224,643 5/28/2024
1.0.186 225,396 5/4/2024
1.0.185 224,078 4/23/2024
1.0.184 223,158 4/21/2024
1.0.183 221,995 4/14/2024
1.0.182 227,344 3/28/2024
1.0.181 221,933 3/17/2024
1.0.180 225,354 2/23/2024
1.0.179 221,959 2/23/2024
1.0.178 225,340 2/18/2024
1.0.177 221,932 2/18/2024
1.0.176 222,014 2/16/2024
1.0.175 224,107 2/13/2024
1.0.174 223,831 2/8/2024
1.0.173 224,276 2/5/2024
1.0.172 221,989 2/4/2024
1.0.171 224,525 1/23/2024
1.0.170 222,085 1/23/2024
1.0.169 223,798 1/12/2024
1.0.168 227,224 1/2/2024
1.0.167 222,310 12/29/2023
1.0.166 240,497 11/12/2023
1.0.165 633,619 11/10/2023
1.0.164 222,271 11/10/2023
1.0.163 633,312 11/9/2023
1.0.162 634,211 11/3/2023
1.0.161 633,154 11/1/2023
1.0.160 633,213 11/1/2023
1.0.159 658,554 9/8/2023
1.0.158 633,631 9/8/2023
1.0.157 633,874 9/3/2023
1.0.156 634,140 8/21/2023
1.0.155 223,545 8/14/2023
1.0.154 634,657 8/10/2023
1.0.153 674,304 6/29/2023
1.0.152 648,733 5/27/2023
1.0.151 223,238 5/21/2023
1.0.150 223,340 5/19/2023
1.0.149 659,725 5/8/2023
1.0.148 639,659 4/21/2023
1.0.147 685,345 4/3/2023
1.0.146 641,825 3/13/2023
1.0.145 653,664 3/6/2023
1.0.144 635,795 2/26/2023
1.0.143 239,723 2/21/2023
1.0.142 224,134 2/20/2023
1.0.141 225,401 2/15/2023
1.0.140 224,144 2/14/2023
1.0.139 667,636 2/9/2023
1.0.138 240,568 2/7/2023
1.0.137 635,660 2/4/2023
1.0.136 655,732 2/2/2023
1.0.135 652,016 1/30/2023
1.0.134 230,159 1/18/2023
1.0.133 679,389 12/30/2022
1.0.132 637,699 12/23/2022
1.0.131 656,132 12/12/2022
1.0.130 658,763 12/4/2022
1.0.129 636,214 12/4/2022
1.0.128 636,958 11/30/2022
1.0.127 225,350 11/29/2022
1.0.126 225,519 11/28/2022
1.0.125 640,447 11/18/2022
1.0.124 663,706 11/11/2022
1.0.123 636,494 11/11/2022
1.0.122 225,586 11/10/2022
1.0.121 636,766 11/5/2022
1.0.120 638,117 11/4/2022
1.0.119 660,206 11/1/2022
1.0.118 660,491 10/16/2022
1.0.117 643,750 9/10/2022
1.0.116 687,317 9/8/2022
1.0.115 637,021 9/8/2022
1.0.114 226,194 9/8/2022
1.0.113 639,360 9/4/2022
1.0.112 315,792 8/24/2022
1.0.111 646,424 8/8/2022
1.0.110 640,095 7/26/2022
1.0.109 637,233 7/26/2022
1.0.108 689,715 7/19/2022
1.0.107 271,253 7/18/2022
1.0.106 231,314 7/8/2022
1.0.105 641,446 6/18/2022
1.0.104 637,262 6/6/2022
1.0.103 733,818 4/30/2022
1.0.102 637,528 4/20/2022
1.0.101 637,581 4/10/2022
1.0.100 637,554 4/7/2022
1.0.99 637,478 4/7/2022
1.0.98 637,667 4/2/2022
1.0.97 238,036 3/29/2022
1.0.96 229,608 3/27/2022
1.0.95 512,690 1/24/2022
1.0.94 796,503 12/29/2021
1.0.93 663,771 12/20/2021
1.0.92 637,185 12/13/2021
1.0.91 693,309 12/6/2021
1.0.90 227,832 12/2/2021
1.0.89 664,902 11/29/2021
1.0.88 663,497 11/22/2021
1.0.87 224,649 11/17/2021
1.0.86 665,327 11/13/2021
1.0.85 228,092 11/10/2021
1.0.84 635,657 11/9/2021
1.0.83 287,221 11/5/2021
1.0.82 637,390 11/4/2021
1.0.81 635,542 11/4/2021
1.0.80 635,455 11/3/2021
1.0.79 635,704 10/30/2021
1.0.78 666,950 10/21/2021
1.0.77 636,131 10/17/2021
1.0.76 696,875 10/14/2021
1.0.75 646,770 10/13/2021
1.0.74 635,726 10/12/2021
1.0.73 667,360 10/11/2021
1.0.72 635,557 10/9/2021
1.0.71 670,723 10/7/2021
1.0.70 672,791 10/7/2021
1.0.69 635,678 10/7/2021
1.0.68 224,821 10/6/2021
1.0.67 635,803 9/28/2021
1.0.66 669,529 9/23/2021
1.0.65 637,432 9/10/2021
1.0.64 635,537 9/9/2021
1.0.63 635,555 9/8/2021
1.0.62 635,669 9/8/2021
1.0.61 666,443 9/6/2021
1.0.60 225,021 8/31/2021
1.0.59 224,791 8/30/2021
1.0.58 668,721 7/31/2021
1.0.57 695,249 7/30/2021
1.0.56 636,002 7/26/2021
1.0.55 724,577 7/5/2021
1.0.54 225,028 7/1/2021
1.0.53 698,085 6/4/2021
1.0.52 725,804 4/26/2021
1.0.51 666,386 4/19/2021
1.0.50 784,385 4/7/2021
1.0.49 665,591 4/3/2021
1.0.48 813,581 3/22/2021
1.0.47 747,427 3/4/2021
1.0.46 668,747 2/26/2021
1.0.45 802,725 2/2/2021
1.0.44 339,195 1/24/2021
1.0.43 225,488 1/24/2021
1.0.42 225,122 1/23/2021
1.0.41 282,541 1/20/2021
1.0.40 635,906 1/20/2021
1.0.39 253,589 1/18/2021
1.0.38 225,073 1/18/2021
1.0.37 663,054 1/16/2021
1.0.36 752,860 12/16/2020
1.0.35 690,349 12/14/2020
1.0.34 668,120 12/9/2020
1.0.33 638,201 12/6/2020
1.0.32 225,513 12/2/2020
1.0.31 636,225 12/2/2020
1.0.30 664,487 12/1/2020
1.0.29 824,813 11/12/2020
1.0.29-atestpub 2,466 11/11/2020
1.0.28 665,510 10/11/2020
1.0.27 747,286 9/9/2020
1.0.26 664,061 9/3/2020
1.0.25 253,817 8/20/2020
1.0.24 719,770 8/9/2020
1.0.23 254,094 7/28/2020
1.0.22 253,053 7/19/2020
1.0.21 280,251 7/6/2020
1.0.20 720,200 6/6/2020
1.0.19 665,257 6/4/2020
1.0.18 281,606 5/29/2020
1.0.17 692,435 5/21/2020
1.0.16 637,053 5/17/2020
1.0.15 691,193 5/12/2020
1.0.14 745,606 5/4/2020
1.0.13 641,128 4/24/2020
1.0.12 643,845 4/22/2020
1.0.11 636,848 4/22/2020
1.0.10 636,883 4/21/2020
1.0.9 666,043 4/18/2020
1.0.8 253,082 4/16/2020
1.0.7 225,908 4/16/2020
1.0.6 659,034 4/15/2020
1.0.5 661,637 4/11/2020
1.0.4 660,532 4/3/2020
1.0.3 225,391 4/1/2020
1.0.2 647,458 3/27/2020
1.0.1 646,483 3/22/2020
1.0.0 228,757 3/22/2020