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 в вопросе нет поэтому исходил что это словарь словарей

→ Ссылка