示例1:
var ca = p.GetCustomAttribute<ConnectorAttribute>();
return ca?.Point.IsEqual(cp) ?? false;
示例2:
var ca = p.GetCustomAttribute<ConnectorAttribute>();
return (null != ca) && ca.Point.IsEqual(cp);
问题:
编辑:没有人提及,但标题有一些错误,我已经纠正过了。
编辑2:根据评论,&#39;这些代码是相同的&#39;。对我而言,它仍然不像接缝那样微不足道。
答案here表示示例1的第一部分创建了Nullable<bool>
类型。是否因为零合并运算符而优化?
答案 0 :(得分:2)
回答你的第一个问题:是的。
对第二个问题的简短回答:没有,你应该选择哪个更具可读性。
回答你的第三个问题:如果你希望整个表达能够一次性运行&#34;&#34;并且因此不受并发问题的影响,那么不,null-coalescing运算符不能保证在Stackoverflow question的答案中解释。 在您的两个示例中,您实际上都面临着相同的并发性挑战。
查看Microsoft '??' doc,提到的是运营商的目的和功能:
?? operator被称为null-coalescing运算符。如果操作数不为null,则返回左侧操作数;否则它会返回右手操作数。
因此,null-coalescing运算符使您编写更清晰的代码,否则您需要两次编写有问题的操作数(如第二个示例中所示)。
null-coalescing运算符的使用与效用比性能更相关,正如similar Stackoverflow question所接受的答案所解释的那样。实际上,两者表现完全一样。
有趣的是,作为同一答案的一部分,null-coalescing运算符似乎执行得稍微快一些,但差别很小,可以忽略。
答案 1 :(得分:0)
要回答你的问题(null != ca)
等于ca?
为?
(这提供了更多的可读性和更短的版本)它运算符只是检查值是否为null,不确定但是编译器在做同样事情的引擎盖,你可以使用反射器检查。
只是为了不是两个都会给你相同的结果并且执行也是相同的,它只是C#的编译器在引擎盖下用空检查替换?
。