C#: Как можно упростить конструкцию try-catch?
Довольно часто приходится в коде использовать try-catch при получении каких-либо данных из словаря, в котором этих данных может не быть.
Обычно делаю так:
int result;
try
{
// для примера какой-либо индекс и ключ
result = MyDict[SomethingIndex]["SomethingKey"];
}
catch
{
result = 0;
}
Можно ли как-то уменьшить этот блок кода?
Ответы (1 шт):
Автор решения: Vasek
→ Ссылка
Элемент из словаря можно получать через TryGetValue. А при условии что это надо делать часто можно для удобства сделать метод расширение.
static class MyExtensions
{
public static int Get(this Dictionary<int, Dictionary<string, int>> dictionary, int intKey, string strKey)
{
int result = 0;
dictionary.TryGetValue(intKey, out var innerDictionary);
innerDictionary?.TryGetValue(strKey, out result);
return result;
}
}
class Program
{
static void Main(string[] args)
{
var MyDict = new Dictionary<int, Dictionary<string, int>>();
MyDict.Add(1, new Dictionary<string, int>());
MyDict[1].Add("q", 2);
var result = MyDict.Get(1, "q");
}
}
PS: описания MyDict в вопросе нет поэтому исходил что это словарь словарей