【发布时间】:2014-08-09 05:41:15
【问题描述】:
左边的方法是?? C# 中的运算符被调用两次?一次用于评估,一次用于分配?
在下面一行:
int i = GetNullableInt() ?? default(int);
我假设需要首先调用GetNullableInt() 方法,以便在进行分配之前评估结果。如果没有发生这种情况,则需要分配变量“i”,然后对其进行评估,这对于接收分配的项目来说似乎很危险,因为在对象分配期间,理论上可以仅在第一阶段过早地分配空值将其替换为右侧方法的结果。
【问题讨论】:
-
为什么假设它会被调用两次? - 如果是,那么如果方法返回不同的值(它有权获得),结果可能是错误的
-
好像可以测试一下。
-
我不这么认为。它可能调用该方法,将返回值分配给
i,检查i的值是否为null,如果是,则分配正确的部分。我就是这样做的..... -
@MarioStoilov 它将使用中间变量,但不一定是
i。虽然运行时有很多选项,但通常这(以及实际上相当多的操作)会导致隐式未命名的临时变量。毕竟,考虑一下如果表达式本身在其中使用i会发生什么 -
@MarioStoilov:不,这不是发生的事情,而且它不可能是发生的事情 - 因为
i永远不能为空。空合并表达式被完全评估,结果分配给i。
标签: c#