TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #3364 339
День 2806. #ЗаметкиНаПолях
Типы Коллекций в .NET, Которые Стоит Попробовать. Начало

Большинство разработчиков ежедневно используют List<T> и Dictionary<TKey, TValue>. Однако в .NET есть и специализированные коллекции, способные сделать код быстрее, безопаснее и проще в сопровождении. Рассмотрим некоторые из них, о которых стоит знать каждому .NET-разработчику.

1. HashSet<T>
Многие разработчики используют List<T> для проверки наличия элемента.
if(users.Contains(id))

Проблема в том, что List.Contains() выполняет линейный поиск. HashSet<T> использует хэширование для гораздо более быстрого поиска:
var permissions =
new HashSet<string>
{
"Read",
"Write",
"Delete"
};
Console.WriteLine(
permissions.Contains("Write"));


Где использовать:
- выявление дубликатов,
- проверка наличия прав доступа,
- быстрый поиск.

См. подробнее про HashSet

2. PriorityQueue<TElement,TPriority>
Нужно первым делом обработать элемент с наивысшим приоритетом?
Вместо того чтобы постоянно сортировать список, используйте PriorityQueue:
var queue = new PriorityQueue<string, int>();
queue.Enqueue("Low", 3);
queue.Enqueue("Medium", 2);
queue.Enqueue("High", 1);
while (queue.Count > 0)
Console.WriteLine(queue.Dequeue());

// Вывод:
// High
// Medium
// Low


Где использовать:
- планировщики заданий,
- обработка задач,
- алгоритмы маршрутизации,
- поиск пути в системах ИИ,
- моделирование событий.

См. подробнее про PriorityQueue

3. ConcurrentDictionary<TKey,TValue>
Обычный словарь (Dictionary) не является потокобезопасным. Если несколько потоков будут одновременно читать и записывать данные, это неизбежно приведёт к возникновению исключений или нарушению целостности данных.
ConcurrentDictionary решает эту проблему:
using System.Collections.Concurrent;

var cache = new ConcurrentDictionary<int, string>();
Parallel.For(0, 1000, i =>
{
cache.TryAdd(i, $"User {i}");
});
Console.WriteLine(cache.Count);


Почему не использовать блокировку?
Вместо:
lock(_lock)
{
dictionary.Add(...);
}

Используйте:
cache.TryAdd(key, value);

- яснее,
- быстрее,
- безопаснее.

Где использовать:
- кэширование,
- фоновые сервисы,
- параллельная обработка.

См. также Использование потокобезопасных коллекций

Окончание следует…

Источник:
https://medium.com/turbo-net/7-dotnet-collections-youre-probably-not-using-but-should-a76437aa6a62
  • 👍 5
More from @netdeveloperdiary
  1. Oct 6, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
  2. Oct 5, 2026День 2805. #ЧтоНовенького #NET11 Аргументы в Выражениях Коллекций в C#15 В C#15 реализован…
  3. Oct 4, 2026День 2804. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  4. Oct 3, 2026Post #3360
  5. Oct 3, 2026День 2803. #Оффтоп Чем Заняться, Пока Работают Агенты? У VS Code Есть Ответ Сейчас большую…
  6. Oct 2, 2026День 2802. #Карьера #Юмор Секреты Программирования, Известные Только Легендам Ещё один пос…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →