C #: Что возвращает индексатор [string] в Dictionary? - PullRequest
24 голосов
/ 29 декабря 2008

Что возвращает индексатор [string] из Dictionary, когда ключ отсутствует в Словаре? Я новичок в C #, и я не могу найти ссылку так же хорошо, как Javadocs.

Получу ли я null или получу исключение?

Ответы [ 4 ]

25 голосов
/ 29 декабря 2008

Если вы имеете в виду индексатор Dictionary<string,SomeType>, то вы должны увидеть исключение (KeyNotFoundException). Если вы не хотите, чтобы ошибка:

SomeType value;
if(dict.TryGetValue(key, out value)) {
   // key existed; value is set
} else {
   // key not found; value is default(SomeType)
}
14 голосов
/ 29 декабря 2008

Как всегда, документация - это способ выяснить.

Под исключениями:

KeyNotFoundException
The property is retrieved and key does not exist in the collection

(я полагаю, вы имеете в виду Dictionary<TKey,TValue>, кстати.)

Обратите внимание, что это отличается от неуниверсального поведения Hashtable .

Чтобы попытаться получить значение ключа, когда вы не знаете, существует он или нет, используйте TryGetValue .

5 голосов
/ 01 июля 2010

Я думаю, вы можете попробовать

dict.ContainsKey(someKey)

чтобы проверить, содержит ли словарь ключ или нет.

Спасибо

4 голосов
/ 29 декабря 2008

Кроме использования TryGetValue, вы можете сначала проверить, существует ли ключ, используя dict.ContainsKey(key), тем самым устраняя необходимость объявлять значение перед тем, как выяснить, действительно ли оно вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...