c# - 此条件表达式的语法
问题描述
我在 if else 语句(c#)中有以下代码。
if (!string.IsNullOrEmpty(ParentKey))
{
Build(x => x.ParentKey == ParentKey);
}
else
{
Build(x => x.Url == Request.Url.GetLeftPart(UriPartial.Path));
}
但是,我更喜欢使用这样的条件表达式:
var r = !string.IsNullOrEmpty(ParentKey)
? 100
: 1000;
通常,这不会是一个问题,但 var 的Func<SiloNode, bool>
含义是表达式看起来像这样:
Func<SiloNode, bool> predicate = !string.IsNullOrEmpty(ParentKey)
? x => x.ParentKey == ParentKey
: x => x.Url == Request.Url.GetLeftPart(UriPartial.Path);
不出所料,上面的代码给了我一个语法错误,但我不确定是因为我使用了错误的语法还是不可能。
任何人有任何启示?
解决方案
一个 lambda 只是一个 lambda,您的两个 lambda 不一定对应于一个Func
对象(即使签名匹配)。
您实际上可以将这些 lambda 中的一个(或两个)转换为适当的Func
类型,然后该?:
运算符将起作用。
Func<SiloNode, bool> predicate = !string.IsNullOrEmpty(ParentKey)
? (Func<SiloNode, bool>)(x => x.ParentKey == ParentKey)
: x => x.Url == Request.Url.GetLeftPart(UriPartial.Path);
推荐阅读
- reactjs - React + Express:Axios 在 Heroku 上返回 405 Method Not Allowed
- c - 如何使用双指针在 C 中操作数组?
- c# - Char.Parse("P") 在 C# 中返回 80 'P'
- html - 剪辑路径多边形圆边
- ruby - 液体 - 除非 for.loop 似乎总是最后一个
- sql - 如果结果 = 0/null 那么改变在哪里?
- regex - 使用正则表达式在 {{}} 之间提取变量
- python - 将两个列表相减,如果值为负,则从第一个列表中取值(Python)
- java - 如何在 WSO2 ESB 6.6.0 中使代理内的缓存无效
- javascript - 获取有效的 http get 请求(第 3 方 api)并改用 fetch,但签名不匹配