我在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);
不出所料,上面的代码给了我一个语法错误,但是我不确定是否是因为我使用了错误的语法或者根本不可能。
有人照亮了吗?
答案 0 :(得分:1)
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);