C#中的运算符优先级和关联性

巴拉吉

我有两行编码,如下所示

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

运算符优先级和关联性

来自分类Dev

ANTLRv4语法中Java运算符的关联性和优先级

来自分类Dev

谁定义C运算符的优先级和关联性?

来自分类Dev

JavaScript运算符的优先级和关联性

来自分类Dev

C / C ++编译器如何根据运算符的优先级和关联性来分隔标记?

来自分类Dev

Haskell中具有运算符优先级和关联性的漂亮打印语法树

来自分类Dev

bash中短循环逻辑运算符的优先级(和关联性)是什么

来自分类Dev

C位优先级和关联性

来自分类Dev

C ++优先级和关联性

来自分类Dev

运算符的优先级和关联性仅决定表达式的分组方式,而不指定计算顺序

来自分类Dev

C中的短路和运算符优先级

来自分类Dev

C运算符中的优先级==和(=)

来自分类Dev

C中'or'和'and'运算符的优先级

来自分类Dev

C中的函数调用运算符的关联性

来自分类Dev

奇异的优先级和关联性

来自分类Dev

C ++与C#运算符优先级

来自分类Dev

运算符的优先级:>和==

来自分类Dev

如何在C#中测试条件运算符的右关联性

来自分类Dev

Haskell中的运算符和函数优先级

来自分类Dev

OCaml中的@@和|>运算符优先级

来自分类Dev

C ++运算符优先级和return语句

来自分类Dev

C ++ std :: cout和<<运算符,优先级

来自分类Dev

C ++流和运算符>>优先级

来自分类Dev

如何发现GHCI中函数的优先级和关联性?

来自分类Dev

在以下示例中,优先级和关联性如何工作?

来自分类Dev

C中的移位运算符优先级

来自分类Dev

c中运算符的优先级

来自分类Dev

C中运算符优先级的奇怪结果

来自分类Dev

C ++中的运算符优先级