【发布时间】:2015-06-15 18:42:30
【问题描述】:
我知道做(myValue ?? new SomeClass())和(myValue == null ? new SomeClass() : myValue)类似
但出于好奇,当我调用一个函数时,是否有任何性能优势,比如说
(getResult() ?? new SomeClass())。 getResult() 会被执行两次吗?这似乎不直观,因为我只指定了一次方法调用。
【问题讨论】:
-
以上两个是很好的答案,解释?? .请看一看。
-
@Mukund - 都解释了合并运算符的作用,但不回答表达式是否计算一次\两次的问题。 (hamid 在第二个中的回答似乎表明了两次,但我不认为这是正确的,因为他只是想解释它的作用,而不是 IL 中生成的内容).. 测试使用起来很容易一个静态计数器,但我宁愿听专家说 ;-)
-
@arviman 点。我只是把你的问题读成“我知道 X 是真的,那么 X 是假的吗?”其中 X 是假的,所以问题的开头句是一个反事实假设。我意识到您的问题是反问的,但无论如何我都会回答:我可能只是问“
??运算符的左操作数是否在其结果为非空时执行了两次”,尽管有些冗长。但那是在整个讨论之后。我同意,从头开始提出问题可能很困难。
标签: c# null-coalescing-operator