Лучший способ справиться с исключение keynotfoundexception
Я использую словарь для выполнения поиска для программы, над которой я работаю. Я запускаю связку ключей через словарь, и я ожидаю, что некоторые ключи не имеют значения. Я ловлю KeyNotFoundException
там, где это происходит, и поглотить его. Все остальные исключения будут распространяться на вершину. Это лучший способ справиться с этим? Или я должен использовать другой поиск? Словарь использует int в качестве ключа, и пользовательский класс в качестве своего значения.
5 ответов:
использовать
Dictionary.TryGetValue
вместо:Dictionary<int,string> dictionary = new Dictionary<int,string>(); int key = 0; dictionary[key] = "Yes"; string value; if (dictionary.TryGetValue(key, out value)) { Console.WriteLine("Fetched value: {0}", value); } else { Console.WriteLine("No such key: {0}", key); }
попробуйте использовать: Словарь.ContainsKey
Edit:
Производительность мудрый, я думаю,Dictionary.TryGetValue
лучше, как некоторые другие предложили, но я не люблю использовать, когда мне не нужно, поэтому, на мой взгляд, ContainsKey более читаем, но требует больше строк кода, если вам также нужно значение.
одна линия решение с помощью
TryGetValue
string value = dictionary.TryGetValue(key, out value) ? value : "No key!";
имейте в виду, что стоимостью переменная должна иметь тип, который словарь возвращает в этом случае строка. Здесь вы не можете использовать ВАР для объявления переменной.
вот однострочное решение (имейте в виду, что это делает поиск дважды. Ниже приведена версия tryGetValue, которая должна использоваться в длительных циклах.)
string value = dictionary.ContainsKey(key) ? dictionary[key] : "default";
тем не менее мне приходится делать это каждый раз, когда я обращаюсь к словарю. Я бы предпочел, чтобы он возвращал null, поэтому я могу просто написать:
string value = dictionary[key] ?? "default";//this doesn't work