Почему словари не просто возвращают 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" отличным от "ключа не существует".
Ответ 2
Попробуйте использовать
или, возможно,
Ответ 3
Microsoft решила, что =)
Сделайте встроенную проверку, чтобы этого избежать.
object myvalue = dict.ContainsKey(mykey) ? dict[mykey] : null;
Ответ 4
Практическая причина. Потому что словарь может хранить нулевое значение. Вы не сможете отличить этот случай от исключения в своем сценарии.
Ответ 5
Boom!
http://github.com/jsonmez/Defaultable-Dictionary
http://simpleprogrammer.com/2011/08/14/making-switch-refactorings-better-defaultable-dictionary/