Как пользоваться Dictionary в C# и перебрать все пары ключ-значение?
Перешёл с Python, там были словари dict. В C# вижу Dictionary<TKey, TValue>, но синтаксис непривычный. Как создать словарь, добавить элементы и потом пройтись по всем парам? И правда ли, что Hashtable — это устаревшая версия?
2 ответа
Dictionary<TKey, TValue> — это как раз аналог питоновского dict. Создание и заполнение:
var ages = new Dictionary<string, int>
{
["Аня"] = 25,
["Борис"] = 30
};
ages["Вера"] = 28; // добавить/перезаписать
ages.Add("Глеб", 40); // добавить (бросит исключение, если ключ уже есть)
Перебор всех пар через foreach — каждый элемент это KeyValuePair:
foreach (var pair in ages)
Console.WriteLine($"{pair.Key} -> {pair.Value}");
// или через деконструкцию (C# 7+):
foreach (var (name, age) in ages)
Console.WriteLine($"{name} -> {age}");
Безопасное чтение, чтобы не словить KeyNotFoundException:
if (ages.TryGetValue("Аня", out int a))
Console.WriteLine(a);
if (ages.ContainsKey("Зоя"))
Console.WriteLine(ages["Зоя"]);
Про Hashtable — да, это старый необобщённый класс из .NET 1.0. Он хранит всё как object, требует приведения типов и медленнее. В новом коде всегда используйте Dictionary<TKey, TValue>.
Добавлю про перебор только ключей или только значений — это часто нужно:
foreach (string key in ages.Keys)
Console.WriteLine(key);
foreach (int value in ages.Values)
Console.WriteLine(value);
И да, Hashtable забудьте как страшный сон — это наследие до дженериков. Dictionary типобезопасен и быстрее.