Когда я впервые начал программировать на C # в прошлом году, я сразу же искал эквивалент карты STL и узнал о словаре.
ОБНОВЛЕНИЕ вычеркнул этот мусор ниже, я был совершенно не прав. Мой опыт работы с картой STL заключался в том, что я ненавидел, когда запрашивал его значение, и если ключа не было на карте, он автоматически создавал тип значения (независимо от того, что делал его конструктор по умолчанию) и добавлял его на карту. Затем я должен проверить это условие в коде и выдать исключение.
Словарь <> возвращает весь шебанг правильно - если ключа нет, он выдает исключение, если вы запрашиваете значение, или автоматически добавляет его, если его нет, и вы хотите установить значение.
Но вы все это уже знали. Я должен был написать свои модульные тесты, прежде чем писать здесь и смущать себя. :) Они написаны сейчас!
Теперь я люблю Dictionary и все, но больше всего меня беспокоит в этом вопросе прямо сейчас заключается в том, что если ключ отсутствует в словаре, он генерирует исключение KeyNotFoundException. Поэтому мне всегда нужно писать такой код:
Dictionary<string,string> _mydic;
public string this[string key]
{
get {
return _mydic[key]; // could throw KeyNotFoundException
}
set {
if( _mydic.ContainsKey( key))
_mydic[key] = value;
else
_mydic.Add( key, value);
}
}
Почему Словарь не добавляет пару «ключ-значение» автоматически, если ключ не существует, как карта STL?
Теперь забавно то, что в прошлой жизни я раздражался, потому что мне часто приходилось пытаться препятствовать тому, чтобы карта делала именно это. Я предполагаю, что мои варианты использования сейчас немного отличаются.