在条件中的内联TryGetValue并评估它的值

Kam*_*zny 4 c# dictionary

有没有办法如何在If条件下的一行上写TryGetValue.调用TryGetValue的正常方式是:

string value;
Dictionary.TryGetValue("Key", out value);
If(value == "condition") { ... }
Run Code Online (Sandbox Code Playgroud)

我正在寻找的将是这样的.

If(Dictionary.TryGetValue("Key", out string) == "Condition") { ... }
Run Code Online (Sandbox Code Playgroud)

我知道这条线不起作用,但它显示了所需的结果.

有什么方法可以实现这个目标吗?

Tim*_*ter 7

您需要首先使用返回bool但是您可以使用out参数(使用> = C#7):

if (Dictionary.TryGetValue("Key", out string value) && value == "Condition")
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

然后你的条件if成为:

if (Dictionary.TryEvaluateValue("Key", value => value == "Condition"))
{
    //...
}
Run Code Online (Sandbox Code Playgroud)