例如,给定以下代码:
int? ReallyComplexFunction()
{
return 2; // Imagine this did something that took a while
}
void Something()
{
int i = ReallyCleverFunction() ?? 42;
}
...是否保证该函数只会被调用一次?在我的测试中,它只被调用一次,但我看不到任何文件说明我可以依赖它总是如此。
编辑
我可以猜到它是如何实现的,但是来吧:我们是开发人员。我们不应该在猜测和假设上蒙混过关。例如,所有未来的实现都一样吗?其他平台的语言实现是否相同?这取决于语言的规范及其提供的保证。例如,未来或不同的平台实现(不是一个好的,但有可能)可能会在??
实现中这样做:
return ReallyComplexFunction() == null ? 42 : ReallyComplexFunction();
ReallyComplexFunction
那,如果它没有返回,就会调用两次null
。(虽然这看起来是一个荒谬的实现,但如果你用一个可以为空的变量替换函数,它看起来很合理return a == null ? 42 : a
:)
如上所述,我知道在我的测试中它只被调用一次,但我的问题是C# 规范是否保证/指定左侧只会被调用一次?如果有,在哪里?我在C# 语言规范中看不到任何这样的提及?运算符(我最初在其中寻找查询的答案)。