Ecng.Collections 1.0.282

There is a newer version of this package available.
See the version list below for details.
dotnet add package Ecng.Collections --version 1.0.282
                    
NuGet\Install-Package Ecng.Collections -Version 1.0.282
                    
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.282" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Ecng.Collections" Version="1.0.282" />
                    
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.282
                    
#r "nuget: Ecng.Collections, 1.0.282"
                    
#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.282
                    
#: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.282
                    
Install as a Cake Addin
#tool nuget:?package=Ecng.Collections&version=1.0.282
                    
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.283 873 1/26/2026
1.0.282 629 1/22/2026
1.0.281 1,964 1/19/2026
1.0.280 833 1/19/2026
1.0.279 810 1/18/2026
1.0.278 802 1/18/2026
1.0.277 1,434 1/14/2026
1.0.276 864 1/13/2026
1.0.275 816 1/13/2026
1.0.274 1,246 1/9/2026
1.0.273 890 1/9/2026
1.0.272 3,382 1/4/2026
1.0.271 2,264 12/30/2025
1.0.270 800 12/29/2025
1.0.269 15,222 12/26/2025
1.0.268 15,229 12/26/2025
1.0.267 15,263 12/26/2025
1.0.266 15,284 12/26/2025
1.0.265 20,774 12/25/2025
1.0.264 22,034 12/25/2025
1.0.263 38,738 12/22/2025
1.0.262 45,750 12/21/2025
1.0.261 54,054 12/19/2025
1.0.260 54,728 12/19/2025
1.0.259 63,109 12/17/2025
1.0.258 77,687 12/15/2025
1.0.257 77,594 12/15/2025
1.0.256 83,850 12/14/2025
1.0.255 104,672 12/12/2025
1.0.254 103,982 12/12/2025
1.0.253 103,595 12/12/2025
1.0.252 103,600 12/12/2025
1.0.251 104,340 12/12/2025
1.0.250 167,480 12/2/2025
1.0.249 167,707 12/2/2025
1.0.248 168,488 12/2/2025
1.0.247 184,061 11/30/2025
1.0.246 187,051 11/29/2025
1.0.245 189,231 11/28/2025
1.0.244 189,934 11/28/2025
1.0.243 193,752 11/27/2025
1.0.242 213,487 11/24/2025
1.0.241 215,238 11/24/2025
1.0.240 220,005 11/23/2025
1.0.239 225,418 11/22/2025
1.0.238 243,518 11/20/2025
1.0.237 266,504 11/18/2025
1.0.236 267,185 11/18/2025
1.0.235 309,938 11/13/2025
1.0.234 342,597 11/10/2025
1.0.233 383,258 11/1/2025
1.0.232 382,502 10/28/2025
1.0.231 382,468 10/27/2025
1.0.230 382,338 10/27/2025
1.0.229 382,271 10/25/2025
1.0.228 432,729 10/3/2025
1.0.227 432,805 9/28/2025
1.0.226 432,547 9/25/2025
1.0.225 456,585 8/30/2025
1.0.224 431,046 7/13/2025
1.0.223 422,533 7/13/2025
1.0.222 422,560 7/12/2025
1.0.221 423,876 7/8/2025
1.0.220 423,357 7/4/2025
1.0.219 422,636 7/2/2025
1.0.218 427,515 6/16/2025
1.0.217 422,784 6/9/2025
1.0.216 422,653 6/8/2025
1.0.215 424,296 5/21/2025
1.0.214 422,768 5/17/2025
1.0.213 424,364 5/12/2025
1.0.212 422,682 5/12/2025
1.0.211 425,146 4/17/2025
1.0.210 427,777 3/22/2025
1.0.209 422,652 3/20/2025
1.0.208 422,588 3/20/2025
1.0.207 422,632 3/19/2025
1.0.206 427,822 2/26/2025
1.0.205 422,712 2/26/2025
1.0.204 431,139 2/5/2025
1.0.203 426,628 1/21/2025
1.0.202 425,988 1/14/2025
1.0.201 424,823 1/12/2025
1.0.200 423,278 1/10/2025
1.0.199 426,938 12/27/2024
1.0.198 423,737 11/20/2024
1.0.197 426,223 11/18/2024
1.0.196 424,540 11/7/2024
1.0.195 423,944 10/19/2024
1.0.194 425,790 10/12/2024
1.0.193 426,340 10/5/2024
1.0.192 427,444 9/18/2024
1.0.191 422,736 9/17/2024
1.0.190 427,137 9/3/2024
1.0.189 422,795 9/1/2024
1.0.188 436,898 6/12/2024
1.0.187 425,646 5/28/2024
1.0.186 426,399 5/4/2024
1.0.185 425,074 4/23/2024
1.0.184 424,162 4/21/2024
1.0.183 422,978 4/14/2024
1.0.182 428,350 3/28/2024
1.0.181 422,929 3/17/2024
1.0.180 426,351 2/23/2024
1.0.179 422,954 2/23/2024
1.0.178 426,333 2/18/2024
1.0.177 422,927 2/18/2024
1.0.176 423,000 2/16/2024
1.0.175 425,097 2/13/2024
1.0.174 424,813 2/8/2024
1.0.173 425,273 2/5/2024
1.0.172 422,971 2/4/2024
1.0.171 425,523 1/23/2024
1.0.170 423,085 1/23/2024
1.0.169 424,793 1/12/2024
1.0.168 428,216 1/2/2024
1.0.167 423,311 12/29/2023
1.0.166 441,501 11/12/2023
1.0.165 834,609 11/10/2023
1.0.164 423,264 11/10/2023
1.0.163 834,297 11/9/2023
1.0.162 835,204 11/3/2023
1.0.161 834,135 11/1/2023
1.0.160 834,186 11/1/2023
1.0.159 859,548 9/8/2023
1.0.158 834,613 9/8/2023
1.0.157 834,863 9/3/2023
1.0.156 835,122 8/21/2023
1.0.155 424,528 8/14/2023
1.0.154 835,643 8/10/2023
1.0.153 875,300 6/29/2023
1.0.152 849,715 5/27/2023
1.0.151 424,214 5/21/2023
1.0.150 424,325 5/19/2023
1.0.149 860,703 5/8/2023
1.0.148 840,623 4/21/2023
1.0.147 886,330 4/3/2023
1.0.146 842,792 3/13/2023
1.0.145 854,632 3/6/2023
1.0.144 836,773 2/26/2023
1.0.143 440,709 2/21/2023
1.0.142 425,114 2/20/2023
1.0.141 426,370 2/15/2023
1.0.140 425,142 2/14/2023
1.0.139 868,594 2/9/2023
1.0.138 441,556 2/7/2023
1.0.137 836,647 2/4/2023
1.0.136 856,715 2/2/2023
1.0.135 852,994 1/30/2023
1.0.134 431,149 1/18/2023
1.0.133 880,356 12/30/2022
1.0.132 838,689 12/23/2022
1.0.131 857,117 12/12/2022
1.0.130 859,741 12/4/2022
1.0.129 837,207 12/4/2022
1.0.128 837,947 11/30/2022
1.0.127 426,321 11/29/2022
1.0.126 426,497 11/28/2022
1.0.125 841,422 11/18/2022
1.0.124 864,685 11/11/2022
1.0.123 837,475 11/11/2022
1.0.122 426,567 11/10/2022
1.0.121 837,753 11/5/2022
1.0.120 839,093 11/4/2022
1.0.119 861,196 11/1/2022
1.0.118 861,486 10/16/2022
1.0.117 844,733 9/10/2022
1.0.116 888,305 9/8/2022
1.0.115 838,007 9/8/2022
1.0.114 427,181 9/8/2022
1.0.113 840,342 9/4/2022
1.0.112 516,780 8/24/2022
1.0.111 847,411 8/8/2022
1.0.110 841,080 7/26/2022
1.0.109 838,232 7/26/2022
1.0.108 890,701 7/19/2022
1.0.107 472,227 7/18/2022
1.0.106 432,314 7/8/2022
1.0.105 842,437 6/18/2022
1.0.104 838,250 6/6/2022
1.0.103 934,811 4/30/2022
1.0.102 838,511 4/20/2022
1.0.101 838,563 4/10/2022
1.0.100 838,537 4/7/2022
1.0.99 838,460 4/7/2022
1.0.98 838,642 4/2/2022
1.0.97 439,021 3/29/2022
1.0.96 430,597 3/27/2022
1.0.95 713,750 1/24/2022
1.0.94 997,495 12/29/2021
1.0.93 864,757 12/20/2021
1.0.92 838,176 12/13/2021
1.0.91 894,288 12/6/2021
1.0.90 428,820 12/2/2021
1.0.89 865,872 11/29/2021
1.0.88 864,477 11/22/2021
1.0.87 425,622 11/17/2021
1.0.86 866,310 11/13/2021
1.0.85 429,066 11/10/2021
1.0.84 836,638 11/9/2021
1.0.83 488,198 11/5/2021
1.0.82 838,378 11/4/2021
1.0.81 836,523 11/4/2021
1.0.80 836,453 11/3/2021
1.0.79 836,688 10/30/2021
1.0.78 867,937 10/21/2021
1.0.77 837,121 10/17/2021
1.0.76 897,873 10/14/2021
1.0.75 847,751 10/13/2021
1.0.74 836,716 10/12/2021
1.0.73 868,359 10/11/2021
1.0.72 836,544 10/9/2021
1.0.71 871,720 10/7/2021
1.0.70 873,784 10/7/2021
1.0.69 836,658 10/7/2021
1.0.68 425,800 10/6/2021
1.0.67 836,789 9/28/2021
1.0.66 870,519 9/23/2021
1.0.65 838,408 9/10/2021
1.0.64 836,528 9/9/2021
1.0.63 836,541 9/8/2021
1.0.62 836,661 9/8/2021
1.0.61 867,425 9/6/2021
1.0.60 426,003 8/31/2021
1.0.59 425,782 8/30/2021
1.0.58 869,721 7/31/2021
1.0.57 896,236 7/30/2021
1.0.56 836,999 7/26/2021
1.0.55 925,583 7/5/2021
1.0.54 426,018 7/1/2021
1.0.53 899,107 6/4/2021
1.0.52 926,796 4/26/2021
1.0.51 867,372 4/19/2021
1.0.50 985,384 4/7/2021
1.0.49 866,581 4/3/2021
1.0.48 1,014,603 3/22/2021
1.0.47 948,438 3/4/2021
1.0.46 869,755 2/26/2021
1.0.45 1,003,736 2/2/2021
1.0.44 540,197 1/24/2021
1.0.43 426,481 1/24/2021
1.0.42 426,095 1/23/2021
1.0.41 483,535 1/20/2021
1.0.40 836,898 1/20/2021
1.0.39 454,582 1/18/2021
1.0.38 426,061 1/18/2021
1.0.37 864,046 1/16/2021
1.0.36 953,850 12/16/2020
1.0.35 891,322 12/14/2020
1.0.34 869,093 12/9/2020
1.0.33 839,189 12/6/2020
1.0.32 426,489 12/2/2020
1.0.31 837,199 12/2/2020
1.0.30 865,475 12/1/2020
1.0.29 1,025,806 11/12/2020
1.0.29-atestpub 2,479 11/11/2020
1.0.28 866,500 10/11/2020
1.0.27 948,299 9/9/2020
1.0.26 865,068 9/3/2020
1.0.25 454,798 8/20/2020
1.0.24 920,772 8/9/2020
1.0.23 455,076 7/28/2020
1.0.22 454,041 7/19/2020
1.0.21 481,235 7/6/2020
1.0.20 921,205 6/6/2020
1.0.19 866,234 6/4/2020
1.0.18 482,619 5/29/2020
1.0.17 893,420 5/21/2020
1.0.16 838,032 5/17/2020
1.0.15 892,179 5/12/2020
1.0.14 946,619 5/4/2020
1.0.13 842,117 4/24/2020
1.0.12 844,844 4/22/2020
1.0.11 837,840 4/22/2020
1.0.10 837,866 4/21/2020
1.0.9 867,024 4/18/2020
1.0.8 454,082 4/16/2020
1.0.7 426,887 4/16/2020
1.0.6 860,036 4/15/2020
1.0.5 862,628 4/11/2020
1.0.4 861,517 4/3/2020
1.0.3 426,374 4/1/2020
1.0.2 848,449 3/27/2020
1.0.1 847,473 3/22/2020
1.0.0 429,765 3/22/2020