我有两行编码,如下所示
int? i = 1;
int j = i ?? 2 +1;
now "j is 1"
int? i = 1;
int j = (i ?? 2) +1;
now "j is 2"
你能解释一下吗?
当然-优先事项很简单。(Microsoft)C#规范在7.3.1节中列出了运算符的优先级(无论如何,在C#4和C#5规范中;在C#3规范中为7.2.1),尽管这实际上只是一个信息量大的表-它实际上受制于语法。
无论如何,空值运算符(??
)的优先级低于二进制加法运算符(+
)的优先级,因此您的第一个代码等效于:
int? i = 1;
int j = i ?? (2 + 1);
由于value的值i
非null,因此甚至不会评估null运算符的右侧操作数-的结果i ?? (2 + 1)
仅为1。
将其与您的第二个示例进行比较,在该示例中,null-coalescing运算符表达式再次求值为1,然后将1加到该结果中。有效的是:
int tmp = i ?? 2; // tmp is now 1
int j = tmp + 1; // j is 2
关联在这里无关紧要,只有在两个优先级相同的运算符之间出现操作数时才控制排序/分组。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句