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文档表明情况并非如此?