Что происходит со Словарем C# <интервал, интервал> поиск, если ключ не существует?

Я пытался проверить на пустой указатель, но компилятор предупреждает, что это условие никогда не будет происходить. Что я должен искать?

111
задан deltanovember 26 January 2010 в 11:17
поделиться

6 ответов

Если вы хотите получить значение, если ключ существует , используйте Словарь.TryGetValue:

int value;
if (dictionary.TryGetValue(key, out value))
{
    // Key was in dictionary; "value" contains corresponding value
} 
else 
{
    // Key wasn't in dictionary; "value" is now 0
}

(Используя ContainsKey, а затем индексатор заставляет его выглядеть ключом вверх дважды, что довольно бессмысленно. )

Обратите внимание, что даже если вы использовали с типами ссылок, проверка на ноль не сработает - индексатор для Dictionary<,> будет бросать исключение, если вы запросите отсутствующий ключ, а не возвращать ноль. (В этом большая разница между Словарь<,> и Хэшиббл.)

.
178
ответ дан 24 November 2019 в 03:02
поделиться

Если вы просто проверяете, прежде чем пытаться добавить новое значение, используйте элемент SEETKEY Метод:

if (!openWith.ContainsKey("ht"))
{
    openWith.Add("ht", "hypertrm.exe");
}

Если вы проверяете, что значение существует, используйте метод TrygetValue , как описано в ответе Джона Скета.

10
ответ дан 24 November 2019 в 03:02
поделиться

Вы должны проверить на на наличие словаря. Containskey (int ключ), прежде чем пытаться вытащить значение.

Dictionary<int, int> myDictionary = new Dictionary<int, int>();
myDictionary.Add(2,4);
myDictionary.Add(3,5);

int keyToFind = 7;
if(myDictionary.ContainsKey(keyToFind))
{
    myValueLookup = myDictionay[keyToFind];
    // do work...
}
else
{
    // the key doesn't exist.
}
2
ответ дан 24 November 2019 в 03:02
поделиться

Словарь выбрасывает keynotfound исключение в случае, если словарь не содержит вашего ключа.

Как предложено, указывается , является соответствующей мерой предосторожности. TrygetValue также эффективен.

Это позволяет словарю сохранить значение NULL более эффективно. Без него повязят так, проверка нулевого результата из оператора [] будет указывать либо на нулевое значение, либо не существование входного ключа, которая не является хорошей.

23
ответ дан 24 November 2019 в 03:02
поделиться

Сознайтеке - это то, что вы ищете.

0
ответ дан 24 November 2019 в 03:02
поделиться

Вероятно, следует использовать:

if(myDictionary.ContainsKey(someInt))
{
  // do something
}

Причина, по которой нельзя проверить на ноль, заключается в том, что ключ здесь является типом значения.

0
ответ дан 24 November 2019 в 03:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: