c# - If 条件下的内联 TryGetValue 并评估它的值
问题描述
有什么方法可以在 If 条件下将 TryGetValue 写在一行上。调用 TryGetValue 的正常方式是:
string value;
Dictionary.TryGetValue("Key", out value);
If(value == "condition") { ... }
我正在寻找的是这样的。
If(Dictionary.TryGetValue("Key", out string) == "Condition") { ... }
我知道那条线行不通,但是它显示了所需的结果。
有什么办法可以做到这一点?
解决方案
您需要先使用返回的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"))
{
//...
}
推荐阅读
- python - Folium Map 不显示邮政编码中的标记位置
- laravel - Laravel 与枢轴同步多对多关系
- c# - 为什么在尝试获取已登录用户的用户名以便我可以在共享的 LayoutView 中显示它时出现此错误
- javascript - response.json() 中的值计数来自哪里?
- swift - 使用 GeometryReader 调整窗口大小时在 SwiftUI 中调整矩形网格的大小
- bash - 如何通过 CGI 脚本运行 jar 文件
- authentication - 使用 AuthenticationManager.GetWebLoginClientContext 对用户进行身份验证后,是否可以确定用户的登录名?
- javascript - 我正在尝试在 javascript 生成的 html 中生成一个 onclick 方法,它给了我一些非常奇怪的结果
- c++ - 值未显示,并遇到异常。是什么赋予了?
- c# - Kestrel 服务器声称在端口中侦听,但它没有