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

Начало

4. ReadOnlyDictionary<TKey,TValue>
Иногда требуется, чтобы потребители могли читать словарь, но не могли его изменять. ReadOnlyDictionary служит оболочкой для существующего словаря.
var dict = new Dictionary<int, string>
{
[1] = "One",
[2] = "Two"
};
var readOnly =
new ReadOnlyDictionary<int, string>(dict);
Console.WriteLine(readOnly[1]);

Попытки добавить или удалить элементы через обёртку не допускаются. Это простой способ безопасного предоставления доступа к данным через API «только для чтения».

См. также ReadOnly-Коллекция не Является Неизменяемой

5. ImmutableArray<T>
Иногда требуется коллекция, которую никто не сможет случайно изменить.
Именно это и обеспечивает ImmutableArray<T>:
using System.Collections.Immutable;

ImmutableArray<string> roles =
[
"Admin",
"Manager",
"Employee"
];
foreach (var role in roles)
Console.WriteLine(role);

Попытка изменить объект создаёт новый экземпляр вместо модификации исходного. Благодаря этому код становится гораздо проще анализировать.

Где использовать:
- конфигурации;
- доменные модели;
- разделяемое (shared) состояние приложения.

См. также
- Неизменяемые стеки и очереди
- Неизменяемые списки
- Неизменяемые множества
- Неизменяемые словари

6. FrozenDictionary<TKey,TValue>
Класс FrozenDictionary, появившийся в .NET 8, предназначен для хранения данных, которые не изменяются после создания. После инициализации коллекция становится неизменяемой и высокооптимизированной для операций поиска. Если ваше приложение при запуске загружает конфигурационные данные, коды стран, категории товаров или любые другие наборы данных, предназначенные только для чтения, эта коллекция может значительно превзойти по производительности обычный Dictionary:
using System.Collections.Frozen;

var countries = new Dictionary<string, string>
{
["US"] = "United States",
["IN"] = "India",
["JP"] = "Japan"
};

FrozenDictionary<string, string> frozen =
countries.ToFrozenDictionary();
Console.WriteLine(frozen["IN"]);


Зачем?
- более быстрый поиск,
- потокобезопасность после создания,
- оптимизированное размещение в памяти.

Где использовать:
- конфигурации,
- справочные данные,
- таблицы поиска (lookup tables),
- статические кэши.

См. подробнее о замороженных коллекциях

Итого
В следующий раз, когда вы захотите использовать List<T> или Dictionary<TKey, TValue>, остановитесь на мгновение и спросите себя:
Существует ли коллекция, которая лучше подходит для этой задачи? Вы удивитесь, как часто ответ будет утвердительным.
Современная платформа .NET предлагает специализированные коллекции практически для любого сценария. Изучение того, когда их следует применять, — это небольшое вложение усилий, которое может существенно повлиять на качество и производительность ваших приложений.
Иногда самые значительные улучшения достигаются не за счёт написания дополнительного кода, а благодаря выбору подходящей структуры данных.

Источник:
https://medium.com/turbo-net/7-dotnet-collections-youre-probably-not-using-but-should-a76437aa6a62
  • 👍 11
  • 👎 1
More from @netdeveloperdiary
  1. Oct 6, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
  2. Oct 6, 2026День 2806. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Начало Больши…
  3. Oct 5, 2026День 2805. #ЧтоНовенького #NET11 Аргументы в Выражениях Коллекций в C#15 В C#15 реализован…
  4. Oct 4, 2026День 2804. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  5. Oct 3, 2026Post #3360
  6. Oct 3, 2026День 2803. #Оффтоп Чем Заняться, Пока Работают Агенты? У VS Code Есть Ответ Сейчас большую…
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 →