Ecng.Collections 1.0.277

There is a newer version of this package available.
See the version list below for details.
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.281 579 1/19/2026
1.0.280 521 1/19/2026
1.0.279 519 1/18/2026
1.0.278 487 1/18/2026
1.0.277 1,150 1/14/2026
1.0.276 852 1/13/2026
1.0.275 803 1/13/2026
1.0.274 1,241 1/9/2026
1.0.273 883 1/9/2026
1.0.272 3,378 1/4/2026
1.0.271 2,262 12/30/2025
1.0.270 796 12/29/2025
1.0.269 1,219 12/26/2025
1.0.268 815 12/26/2025
1.0.267 786 12/26/2025
1.0.266 803 12/26/2025
1.0.265 860 12/25/2025
1.0.264 877 12/25/2025
1.0.263 1,384 12/22/2025
1.0.262 2,182 12/21/2025
1.0.261 10,486 12/19/2025
1.0.260 11,148 12/19/2025
1.0.259 19,525 12/17/2025
1.0.258 34,107 12/15/2025
1.0.257 34,016 12/15/2025
1.0.256 40,271 12/14/2025
1.0.255 61,091 12/12/2025
1.0.254 60,407 12/12/2025
1.0.253 60,015 12/12/2025
1.0.252 60,018 12/12/2025
1.0.251 60,758 12/12/2025
1.0.250 123,906 12/2/2025
1.0.249 124,136 12/2/2025
1.0.248 124,910 12/2/2025
1.0.247 140,488 11/30/2025
1.0.246 143,474 11/29/2025
1.0.245 145,652 11/28/2025
1.0.244 146,354 11/28/2025
1.0.243 150,174 11/27/2025
1.0.242 169,908 11/24/2025
1.0.241 171,660 11/24/2025
1.0.240 176,424 11/23/2025
1.0.239 181,845 11/22/2025
1.0.238 199,933 11/20/2025
1.0.237 222,930 11/18/2025
1.0.236 223,607 11/18/2025
1.0.235 266,359 11/13/2025
1.0.234 299,023 11/10/2025
1.0.233 339,680 11/1/2025
1.0.232 338,928 10/28/2025
1.0.231 338,891 10/27/2025
1.0.230 338,757 10/27/2025
1.0.229 338,694 10/25/2025
1.0.228 389,152 10/3/2025
1.0.227 389,229 9/28/2025
1.0.226 388,964 9/25/2025
1.0.225 412,947 8/30/2025
1.0.224 387,457 7/13/2025
1.0.223 378,961 7/13/2025
1.0.222 378,979 7/12/2025
1.0.221 380,248 7/8/2025
1.0.220 379,772 7/4/2025
1.0.219 379,049 7/2/2025
1.0.218 383,933 6/16/2025
1.0.217 379,204 6/9/2025
1.0.216 379,068 6/8/2025
1.0.215 380,709 5/21/2025
1.0.214 379,178 5/17/2025
1.0.213 380,782 5/12/2025
1.0.212 379,098 5/12/2025
1.0.211 381,554 4/17/2025
1.0.210 384,194 3/22/2025
1.0.209 379,067 3/20/2025
1.0.208 379,003 3/20/2025
1.0.207 379,049 3/19/2025
1.0.206 384,235 2/26/2025
1.0.205 379,131 2/26/2025
1.0.204 387,558 2/5/2025
1.0.203 383,055 1/21/2025
1.0.202 382,408 1/14/2025
1.0.201 381,246 1/12/2025
1.0.200 379,693 1/10/2025
1.0.199 383,355 12/27/2024
1.0.198 380,159 11/20/2024
1.0.197 382,641 11/18/2024
1.0.196 380,968 11/7/2024
1.0.195 380,358 10/19/2024
1.0.194 382,216 10/12/2024
1.0.193 382,761 10/5/2024
1.0.192 383,866 9/18/2024
1.0.191 379,151 9/17/2024
1.0.190 383,564 9/3/2024
1.0.189 379,214 9/1/2024
1.0.188 393,323 6/12/2024
1.0.187 382,064 5/28/2024
1.0.186 382,817 5/4/2024
1.0.185 381,497 4/23/2024
1.0.184 380,580 4/21/2024
1.0.183 379,404 4/14/2024
1.0.182 384,770 3/28/2024
1.0.181 379,352 3/17/2024
1.0.180 382,771 2/23/2024
1.0.179 379,373 2/23/2024
1.0.178 382,754 2/18/2024
1.0.177 379,344 2/18/2024
1.0.176 379,419 2/16/2024
1.0.175 381,514 2/13/2024
1.0.174 381,233 2/8/2024
1.0.173 381,696 2/5/2024
1.0.172 379,391 2/4/2024
1.0.171 381,937 1/23/2024
1.0.170 379,503 1/23/2024
1.0.169 381,210 1/12/2024
1.0.168 384,629 1/2/2024
1.0.167 379,724 12/29/2023
1.0.166 397,912 11/12/2023
1.0.165 791,026 11/10/2023
1.0.164 379,688 11/10/2023
1.0.163 790,723 11/9/2023
1.0.162 791,628 11/3/2023
1.0.161 790,553 11/1/2023
1.0.160 790,606 11/1/2023
1.0.159 815,960 9/8/2023
1.0.158 791,028 9/8/2023
1.0.157 791,277 9/3/2023
1.0.156 791,537 8/21/2023
1.0.155 380,945 8/14/2023
1.0.154 792,061 8/10/2023
1.0.153 831,717 6/29/2023
1.0.152 806,130 5/27/2023
1.0.151 380,634 5/21/2023
1.0.150 380,744 5/19/2023
1.0.149 817,122 5/8/2023
1.0.148 797,047 4/21/2023
1.0.147 842,754 4/3/2023
1.0.146 799,214 3/13/2023
1.0.145 811,058 3/6/2023
1.0.144 793,194 2/26/2023
1.0.143 397,131 2/21/2023
1.0.142 381,537 2/20/2023
1.0.141 382,796 2/15/2023
1.0.140 381,551 2/14/2023
1.0.139 825,027 2/9/2023
1.0.138 397,970 2/7/2023
1.0.137 793,077 2/4/2023
1.0.136 813,140 2/2/2023
1.0.135 809,427 1/30/2023
1.0.134 387,576 1/18/2023
1.0.133 836,782 12/30/2022
1.0.132 795,113 12/23/2022
1.0.131 813,542 12/12/2022
1.0.130 816,164 12/4/2022
1.0.129 793,622 12/4/2022
1.0.128 794,371 11/30/2022
1.0.127 382,755 11/29/2022
1.0.126 382,925 11/28/2022
1.0.125 797,847 11/18/2022
1.0.124 821,112 11/11/2022
1.0.123 793,901 11/11/2022
1.0.122 382,993 11/10/2022
1.0.121 794,177 11/5/2022
1.0.120 795,518 11/4/2022
1.0.119 817,622 11/1/2022
1.0.118 817,914 10/16/2022
1.0.117 801,160 9/10/2022
1.0.116 844,732 9/8/2022
1.0.115 794,420 9/8/2022
1.0.114 383,603 9/8/2022
1.0.113 796,761 9/4/2022
1.0.112 473,199 8/24/2022
1.0.111 803,832 8/8/2022
1.0.110 797,498 7/26/2022
1.0.109 794,649 7/26/2022
1.0.108 847,116 7/19/2022
1.0.107 428,650 7/18/2022
1.0.106 388,730 7/8/2022
1.0.105 798,853 6/18/2022
1.0.104 794,672 6/6/2022
1.0.103 891,225 4/30/2022
1.0.102 794,930 4/20/2022
1.0.101 794,982 4/10/2022
1.0.100 794,956 4/7/2022
1.0.99 794,878 4/7/2022
1.0.98 795,066 4/2/2022
1.0.97 395,445 3/29/2022
1.0.96 387,022 3/27/2022
1.0.95 670,151 1/24/2022
1.0.94 953,903 12/29/2021
1.0.93 821,181 12/20/2021
1.0.92 794,599 12/13/2021
1.0.91 850,713 12/6/2021
1.0.90 385,245 12/2/2021
1.0.89 822,303 11/29/2021
1.0.88 820,903 11/22/2021
1.0.87 382,052 11/17/2021
1.0.86 822,729 11/13/2021
1.0.85 385,493 11/10/2021
1.0.84 793,061 11/9/2021
1.0.83 444,624 11/5/2021
1.0.82 794,798 11/4/2021
1.0.81 792,953 11/4/2021
1.0.80 792,870 11/3/2021
1.0.79 793,111 10/30/2021
1.0.78 824,357 10/21/2021
1.0.77 793,539 10/17/2021
1.0.76 854,292 10/14/2021
1.0.75 804,176 10/13/2021
1.0.74 793,126 10/12/2021
1.0.73 824,780 10/11/2021
1.0.72 792,956 10/9/2021
1.0.71 828,135 10/7/2021
1.0.70 830,196 10/7/2021
1.0.69 793,082 10/7/2021
1.0.68 382,214 10/6/2021
1.0.67 793,211 9/28/2021
1.0.66 826,937 9/23/2021
1.0.65 794,830 9/10/2021
1.0.64 792,943 9/9/2021
1.0.63 792,955 9/8/2021
1.0.62 793,078 9/8/2021
1.0.61 823,839 9/6/2021
1.0.60 382,426 8/31/2021
1.0.59 382,200 8/30/2021
1.0.58 826,136 7/31/2021
1.0.57 852,652 7/30/2021
1.0.56 793,415 7/26/2021
1.0.55 881,994 7/5/2021
1.0.54 382,439 7/1/2021
1.0.53 855,521 6/4/2021
1.0.52 883,216 4/26/2021
1.0.51 823,781 4/19/2021
1.0.50 941,796 4/7/2021
1.0.49 822,993 4/3/2021
1.0.48 971,010 3/22/2021
1.0.47 904,858 3/4/2021
1.0.46 826,166 2/26/2021
1.0.45 960,160 2/2/2021
1.0.44 496,619 1/24/2021
1.0.43 382,899 1/24/2021
1.0.42 382,514 1/23/2021
1.0.41 439,946 1/20/2021
1.0.40 793,309 1/20/2021
1.0.39 410,995 1/18/2021
1.0.38 382,477 1/18/2021
1.0.37 820,463 1/16/2021
1.0.36 910,272 12/16/2020
1.0.35 847,739 12/14/2020
1.0.34 825,516 12/9/2020
1.0.33 795,592 12/6/2020
1.0.32 382,912 12/2/2020
1.0.31 793,622 12/2/2020
1.0.30 821,895 12/1/2020
1.0.29 982,219 11/12/2020
1.0.29-atestpub 2,475 11/11/2020
1.0.28 822,916 10/11/2020
1.0.27 904,694 9/9/2020
1.0.26 821,482 9/3/2020
1.0.25 411,215 8/20/2020
1.0.24 877,176 8/9/2020
1.0.23 411,495 7/28/2020
1.0.22 410,446 7/19/2020
1.0.21 437,653 7/6/2020
1.0.20 877,622 6/6/2020
1.0.19 822,654 6/4/2020
1.0.18 439,032 5/29/2020
1.0.17 849,835 5/21/2020
1.0.16 794,447 5/17/2020
1.0.15 848,600 5/12/2020
1.0.14 903,037 5/4/2020
1.0.13 798,531 4/24/2020
1.0.12 801,248 4/22/2020
1.0.11 794,260 4/22/2020
1.0.10 794,279 4/21/2020
1.0.9 823,441 4/18/2020
1.0.8 410,494 4/16/2020
1.0.7 383,308 4/16/2020
1.0.6 816,452 4/15/2020
1.0.5 819,050 4/11/2020
1.0.4 817,938 4/3/2020
1.0.3 382,794 4/1/2020
1.0.2 804,865 3/27/2020
1.0.1 803,901 3/22/2020
1.0.0 386,186 3/22/2020