Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 此条件表达式的语法_C#_Asp.net - Fatal编程技术网

C# 此条件表达式的语法

C# 此条件表达式的语法,c#,asp.net,C#,Asp.net,在if-else语句(c#)中有以下代码 但是,我更愿意使用这样的条件表达式: var r = !string.IsNullOrEmpty(ParentKey) ? 100 : 1000; Func<SiloNode, bool> predicate = !string.IsNullOrEmpty(ParentKey) ? x => x.ParentKey == ParentKey : x => x

在if-else语句(c#)中有以下代码

但是,我更愿意使用这样的条件表达式:

var r = !string.IsNullOrEmpty(ParentKey)
          ? 100
          : 1000;
Func<SiloNode, bool> predicate = !string.IsNullOrEmpty(ParentKey)
        ? x => x.ParentKey == ParentKey
        : x => x.Url == Request.Url.GetLeftPart(UriPartial.Path);
通常情况下,这不会是一个问题,但var是一个
Func
,表示表达式如下所示:

var r = !string.IsNullOrEmpty(ParentKey)
          ? 100
          : 1000;
Func<SiloNode, bool> predicate = !string.IsNullOrEmpty(ParentKey)
        ? x => x.ParentKey == ParentKey
        : x => x.Url == Request.Url.GetLeftPart(UriPartial.Path);
Func谓词=!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);
Func谓词=!string.IsNullOrEmpty(ParentKey)
? (Func)(x=>x.ParentKey==ParentKey)
:x=>x.Url==Request.Url.GetLeftPart(UriPartial.Path);

您遇到的错误是什么?你所做的肯定是可能的。您得到的错误将帮助我们告诉您需要修复什么…请尝试
Build(x=>(string.isnullorempty(ParentKey))?x.Url==Request.Url.GetLeftPart(UriPartial.Path):x.ParentKey==ParentKey)在第三段代码中,您是否错过了调用“Build”方法?您可以尝试
构建(x=>!string.IsNullOrEmpty(ParentKey)?(x.ParentKey==ParentKey):(x.Url==Request.Url.GetLeftPart(UriPartial.Path)))
我想知道是否有一个技术原因,为什么它不能像你刚才那样推断类型
Func predicate=x=>x.Url==“blah”或者,如果这只是没有分配开发人员时间的事情之一…旁注-这有点难读。我可能会坚持使用if/else,只是为了让它更容易阅读。@Chris可能与你不能只说
var action=x=>true的原因相同甚至
var动作=(foox)=>true-显然,lambda不能在运行时静态隐式键入,即使很明显签名是什么。从我所看到的,两个委托类型,即使具有相同的签名,也不可互换,就像两个具有相同定义的类不可互换一样。@JoeEnos-我明白你的意思,Joe,但是如果你使用Zohar的版本并格式化它,它看起来是可读的。你可以使用
谓词
代替
Func