2010-12-17 6 views

ответ

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» отличаться от «ключа не существует».

+0

Это на самом деле не решить причину проектного решения; они просто могли бы просто заставить его возвращать `default (DateTime)` вместо null. – Extragorey 2018-01-17 01:49:43

3

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

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

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