Полезные источники: - [Реализация Dictionary](https://github.com/dotnet/runtime/blob/main/src/libraries/System.Private.CoreLib/src/System/Collections/Generic/Dictionary.cs) в официальном репозитории DotNet (.NET). - [Реализация Dictionary](https://referencesource.microsoft.com/#mscorlib/system/collections/generic/dictionary.cs) в старой версии .NET Dictionary<TKey, TValue> наследует следующие интерфейсы: - IDictionary<TKey, TValue> - ICollection<KeyValuePair<TKey, TValue>> - IEnumerable<KeyValuePair<TKey, TValue>> - IReadOnlyDictionary<TKey, TValue> - IReadOnlyCollection<KeyValuePair<TKey, TValue>> ### Порядок элементов ##### Порядок не гарантируется Порядок перебора элементов в цикле `foreach` **не гарантируется**. Это означает, что элементы могут перебираться в любом порядке, независимо от того, в каком порядке они были добавлены. Это связано с тем, что `Dictionary` в C# основан на хэш-таблице, где элементы располагаются в соответствии с хэшем ключа, а не в порядке их добавления. ##### Порядок все же есть, но это ненадежно Словарь это массив структур. Если вы из словаря не удаляли ни одной пары, то структуры в массиве находятся в порядке их добавления. Если удаляли, то новая пара будет добавлена на первое свободное место и порядок структур в массиве изменится. Т.е. ваше "знание очередности внесения" будет актуальным ровно до первого удаления из словаря любой пары, кроме последней. [Источник](https://www.cyberforum.ru/csharp-beginners/thread2467812.html) ### Индексатор Позволяет добавить новую пару ключ-значение или изменить значение для существующего ключа. Если ключа ещё не существует, он будет добавлен в словарь вместе с соответствующим значением. Если ключ уже существует, его значение будет изменено. ### Add ```csharp public void Add(TKey key, TValue value); ``` Этот метод добавляет указанную пару ключ-значение в словарь Dictionary<TKey, TValue>. Если такой ключ уже существует в словаре, метод вызывает исключение ArgumentException. Время работы обычно составляет O(1), но в худшем случае может достигать O(n), где n - количество элементов в словаре (например, когда происходит повторная хешировка из-за заполнения словаря). ### Clear() ```csharp public void Clear(); ``` Применяется для удаления всех элементов из словаря Dictionary.  Сложность этой операции, в общем случае, O(n), где n - количество элементов в словаре, поскольку метод Clear() проходит через все элементы и удаляет их. Словарь продолжает занимать столько же места в памяти, сколько занимал до очистки. ### AddRange В стандартном API .NET `Dictionary<TKey, TValue>` нет метода `AddRange`, подобного тому, который вы можете найти в коллекциях, таких как `List<T>`. В `Dictionary<TKey, TValue>`, элементы обычно добавляются по одному с помощью метода `Add(TKey key, TValue value)`. ### Equals Сравнивает две коллекции по ссылке, а не по содержимому коллекций. Это означает, что даже если две коллекции содержат одинаковые элементы, метод `Equals` вернет `false`, за исключением случая, когда обе переменные ссылаются на один и тот же объект в памяти.