неверный ключ в словаре - PullRequest
       2

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

15 голосов
/ 17 декабря 2010

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

Ответы [ 5 ]

27 голосов
/ 17 декабря 2010

Поскольку универсальные словари могут содержать экземпляры типа значения, а значение 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.
}

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

5 голосов
/ 17 декабря 2010

Попробуйте использовать

Dictionary.TryGetValue Метод

или, может быть

Dictionary.ContainsKey Method

4 голосов
/ 17 декабря 2010

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

4 голосов
/ 17 декабря 2010

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

object myvalue = dict.ContainsKey(mykey) ? dict[mykey] : null;
2 голосов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...