Неверный ключ в словаре

Почему словари не просто возвращают null, когда для индексирования в коллекцию используется недопустимый ключ?

Ответы

Ответ 1

Поскольку общие словари могут содержать экземпляры типа значения, а null недействителен для типа значения. Например:

var dict = new Dictionary<string, DateTime>();
DateTime date = dict["foo"]; // What should happen here?  date cannot be null!

Вместо этого вы должны использовать метод словаря TryGetValue:

var dict = new Dictionary<string, DateTime>();
DateTime date;

if (dict.TryGetValue("foo", out date)) {
    // Key was present; date is set to the value in the dictionary.
} else {
    // Key was not present; date is set to its default value.
}

Кроме того, словарь, в котором хранятся ссылочные типы, по-прежнему будет хранить нулевые значения. И ваш код может считать "значение равно null" отличным от "ключа не существует".

Ответ 3

Microsoft решила, что =)
Сделайте встроенную проверку, чтобы этого избежать.

object myvalue = dict.ContainsKey(mykey) ? dict[mykey] : null;

Ответ 4

Практическая причина. Потому что словарь может хранить нулевое значение. Вы не сможете отличить этот случай от исключения в своем сценарии.