首页 > 解决方案 > If 条件下的内联 TryGetValue 并评估它的值

问题描述

有什么方法可以在 If 条件下将 TryGetValue 写在一行上。调用 TryGetValue 的正常方式是:

string value;
Dictionary.TryGetValue("Key", out value);
If(value == "condition") { ... }

我正在寻找的是这样的。

If(Dictionary.TryGetValue("Key", out string) == "Condition") { ... }

我知道那条线行不通,但是它显示了所需的结果。

有什么办法可以做到这一点?

标签: c#dictionary

解决方案


您需要先使用返回的bool,然后可以使用out参数(使用 >= C# 7):

if (Dictionary.TryGetValue("Key", out string value) && value == "Condition")
{
    //...
}

MSDN

从 C# 7.0 开始,您可以在方法调用的参数列表中声明 out 变量,而不是在单独的变量声明中。

如果你不使用 C#7 或者你想要它更短,你可以使用这个扩展:

public static bool TryEvaluateValue<TKey, TValue>(this IDictionary<TKey, TValue> dict, TKey key, Func<TValue, bool> evalValue)
{
    TValue val;
    if(!dict.TryGetValue(key, out val))
        return false;
    return evalValue(val);
}

然后你的if-condition 变为:

if (Dictionary.TryEvaluateValue("Key", value => value == "Condition"))
{
    //...
}

推荐阅读