C# 7.5/9.0 Operators priority - 尝试找到一个完整的总结

C# 7.5/9.0 Operators priority - try to find a complete summary

我们使用的是最新版本的 c#。我们需要 Operators 优先级的完整 table,但找不到。

例如,这里的优先级是什么?

string c = a ?? string.Empty + "example";

其中 a 是一个字符串。

那个??运算符称为空合并运算符。如果操作数不为空,它 returns 左边的操作数;否则它 returns 右手操作数。

因此,在您的情况下,将检查 a 是否为空。如果 a 为空,c 将被分配字符串“example”。如果 a 不为空,c 将被分配 a 字符串值。

如果你习惯了三元运算符,可以翻译:

string c = a ?? string.Empty + "example";

至:

string c = a != null ? a : string.Empty + "example";

(link 归功于 Bill Tür,他在评论中做出了回答。)

For example, what's the priority here?

您要查找的搜索词是运算符优先级

运算符优先级记录在 C# 语言参考中,当前位于:

关于您的具体示例,+ 在列表中出现的时间早于 ??,因此具有更高的优先级。这意味着

a ?? b + c

被评估为

a ?? (b + c)

解决一个常见误解的注意事项:运算符优先级 不会 影响 求值顺序 a 仍然被求值在 bc 之前。 C# 中的操作数总是计算 left-to-right.