Я пробовал проверить значение null, но компилятор предупреждает, что этого условия никогда не будет. Что я должен искать?
c#
dictionary
deltanovember
источник
источник
ContainsKey
, что верно, потому что он также должен извлекать ценность. Однако он не выполняет двух поисков.Словарь выдает
KeyNotFound
исключение в случае, если словарь не содержит вашего ключа.Как предполагается,
ContainsKey
это соответствующая мера предосторожности.TryGetValue
также эффективен.Это позволяет словарю более эффективно хранить нулевое значение. Без такого поведения проверка на нулевой результат от оператора [] будет указывать либо на нулевое значение, либо на отсутствие входного ключа, что не годится.
источник
Если вы просто проверяете перед попыткой добавить новое значение, используйте
ContainsKey
метод:Если вы проверяете, существует ли значение, используйте
TryGetValue
метод, описанный в ответе Джона Скита.источник
GetValueElseAdd
методы, которым вы задаете значение (илиFunc<TValue>
), чтобы также сохранить разрешение на Insert, если вы собираетесь добавить, если его там нет. Я предполагаю, что причина, по которой он не вошел в библиотеки .NET, заключается в том, что путь добавления используется реже, если вы используете его в стиле кеширования]TryGetValue
это будет лучше, но если вы хотите проверить, содержит ли словарь ключ, чтобы избежать дублирующих добавлений, я бы сказал, чтоContainsKey
это так же хорошо (если не лучше).Вы должны проверить Dictionary.ContainsKey (int key), прежде чем пытаться извлечь значение.
источник
TryGetValue
. К счастью, сейчас знаю, так что буду знать в будущем. Я собираюсь оставить этот ответ нетронутым, потому что обсуждение полезно.TryGetValue
лямбда-выражения. Хотя это заставляет меня думать, что новое расширение C # будетcatch
оператором, похожим наnull
оператор объединения .Вспомогательный класс удобен:
источник
ContainsKey - это то, что вы ищете.
источник
Вероятно, вам следует использовать:
Причина, по которой вы не можете проверить значение null, заключается в том, что ключ здесь является типом значения.
источник
Если ключ присутствует в словаре, он возвращает значение ключа, в противном случае возвращает 0.
Надеюсь, этот код тебе поможет.
источник
TryGetValue
достаточно, используйтеvalue
вместоresult
Рассмотрите вариант инкапсуляции этого конкретного словаря и предоставьте метод для возврата значения для этого ключа:
Затем вы можете управлять поведением этого словаря.
Например, здесь: если в словаре нет ключа, он возвращает ключ, который вы передаете по параметру.
источник