此条件表达式的语法

时间:2018-10-09 15:05:28

标签: c# asp.net

我在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);

不出所料,上面的代码给了我一个语法错误,但是我不确定是否是因为我使用了错误的语法或者根本不可能。

有人照亮了吗?

1 个答案:

答案 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);