首页 > 解决方案 > 此条件表达式的语法

问题描述

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

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

任何人有任何启示?

标签: c#asp.net

解决方案


一个 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);

推荐阅读