Лучший способ справиться с исключение keynotfoundexception


Я использую словарь для выполнения поиска для программы, над которой я работаю. Я запускаю связку ключей через словарь, и я ожидаю, что некоторые ключи не имеют значения. Я ловлю KeyNotFoundException там, где это происходит, и поглотить его. Все остальные исключения будут распространяться на вершину. Это лучший способ справиться с этим? Или я должен использовать другой поиск? Словарь использует int в качестве ключа, и пользовательский класс в качестве своего значения.

5 55

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

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