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#_Ternary Operator - Fatal编程技术网

C# 有没有办法使三元操作短路?

C# 有没有办法使三元操作短路?,c#,ternary-operator,C#,Ternary Operator,我会写字 if(Model.DecisionReason != null && Model.DecisionReason.Length > 35) return Model.DecisionReason.Substring(0, 32) + "..."; else return Model.DecisionReason; 而if中的和&比较将短路,从而防止Model.DecisionReason为空时出现异常。然而,如果我写 return (Model.D

我会写字

if(Model.DecisionReason != null && Model.DecisionReason.Length > 35)
    return Model.DecisionReason.Substring(0, 32) + "...";
else
    return Model.DecisionReason;
if
中的
和&
比较将短路,从而防止
Model.DecisionReason
为空时出现异常。然而,如果我写

return (Model.DecisionReason != null && Model.DecisionReason.Length > 35) ?
     Model.DecisionReason.Substring(0, 32) + "..." :
     Model.DecisionReason;

没有短路,我碰到了异常。是否有办法使其短路,或者如果检查null或nest ternaries(不是最可读的),我必须在
中包装长度比较?

您编写的两个代码示例将具有相同的行为。短路的不是
if
,而是
&
表达式本身的核心组件

当我运行这两个示例时,它们都可以工作。我怀疑您的分析有错——我猜这是一个简化的问题代码示例来说明问题,对吗?如果是这样的话——看看别处——三元短路的方式与If完全相同。不是真的减少了,而是从头开始写的。结果是我在真实代码中交换了结果,所以如果它为null,它就会短路并尝试获取子字符串。投票认为关闭过于本地化。实际上,
if
也会短路,因为它不会根据条件的实际结果评估
then
else
分支。;-)三值短路的布尔部分与if中的相同,但与if不同,true和false条件不会短路-两者都会执行。@gburton Microsoft文档表明情况并非如此?