gpt4 book ai didi

c# - C# 空合并 (??) 运算符的运算符优先级是什么?

转载 作者:IT王子 更新时间:2023-10-29 04:41:09 30 4
gpt4 key购买 nike

我刚刚尝试了以下方法,想法是连接两个字符串,用空字符串替换空值。

string a="Hello";
string b=" World";

-- 调试(有趣的是 ? 是打印的,并不完全有助于提高可读性...)

 ? a ?? "" + b ?? "" 

->“你好”

正确的是:

? (a??"")+(b??"")
"Hello World"

我有点期待“Hello World”,或者如果 a 为空则只是“World”。显然,这与运算符优先级有关,可以用括号克服,是否有任何地方记录了这个新运算符的优先级顺序。

(意识到我可能应该使用 stringbuilder 或 String.Concat)

谢谢。

最佳答案

除了您喜欢的优先级、根据 ECMA 的优先级、根据 MS 规范的优先级以及 csc 的实际作用,我还有一点建议:

不要这样做

我认为这样写更清晰:

string c = (a ?? "") + (b ?? "");

或者,假设字符串连接中的 null 最终只是一个空字符串,只需写:

string c = a + b;

编辑:关于记录的优先级,在 C# 3.0 spec 中(Word 文档)和 ECMA-334 , 加法比 ?? 结合得更紧密,后者比赋值结合得更紧密。 IMO,另一个答案中给出的 MSDN 链接是错误且奇怪的。 2008 年 7 月在页面上显示了一个更改,它移动了条件运算符 - 但显然不正确!

关于c# - C# 空合并 (??) 运算符的运算符优先级是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/511093/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com