我刚刚尝试了以下方法,想法是连接两个字符串,用空字符串替换空值。
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/