Почему словари не просто возвращают null
, когда для индексирования в коллекцию используется недействительный ключ?Неверный ключ в словаре
13
A
ответ
25
Поскольку общие словари могут содержать экземпляры типа значения, и нуль не является действительным для типа значения. Например:
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;
5
3
Практические соображения: поскольку словарь может хранить нулевое значение. Вы не сможете отличить этот случай от исключения в своем сценарии.
2
Это на самом деле не решить причину проектного решения; они просто могли бы просто заставить его возвращать `default (DateTime)` вместо null. – Extragorey 2018-01-17 01:49:43