Есть ли способ сделать это, например, использовать лямбды каким-то образом? Если у меня есть словарь, можно ли сократить мой код, чтобы TryGetValue выдавал Foo.a вместо простого возврата объекта?

Прямо сейчас это выглядит немного скучно, например, "a" как int:

int a;
Foo bar;
if(!dict.TryGetValue(key, out valueObj)) {
    a = 0;
}
else {
    a = bar.a;
}
0
Cerzi 24 Фев 2018 в 12:44

3 ответа

Лучший ответ

Зачем вам нужен LINQ для достижения чего-то такого простого?

public Object GetObjectFromDict(string foo)
{
    if (someDict.ContainsKey(foo))
    {
        return someDict[foo];
    }
    return null;
}
2
FaizanHussainRabbani 24 Фев 2018 в 09:48

Вы можете немного упростить это с помощью условного выражения и новой функции C out var:

int a = dict.TryGetValue(key, out var valueObj) ? valueObj.a : 0;

По сути, это то же решение, которое вы представили, только переписанное в одну строку.

2
dasblinkenlight 24 Фев 2018 в 09:52

Вот один лайнер:

int a = dict.TryGetValue(key, out SomeClass valueObj) ? valueObj.a : 0;
1
Haytam 24 Фев 2018 в 09:52