我刚刚尝试了以下操作,其想法是连接两个字符串,用空字符串替换空值。
string a="Hello";
string b=" World";
-- 调试(有趣的是?是打印,并不完全有助于可读性......)
? a ?? "" + b ?? ""
->“你好”
正确的是:
? (a??"")+(b??"")
"Hello World"
我有点期待“Hello World”,或者如果 a 为空,则只是“World”。显然,这与运算符优先级有关,可以通过括号来克服,是否有任何地方记录了这个新运算符的优先级顺序。
(意识到我可能应该使用 stringbuilder 或 String.Concat)
Thanks.
除了你想要的like优先级、ECMA 规定的内容、MS 规范规定的内容以及 csc 实际执行的操作,我有一点建议:
不要这样做.
我想这是much写得更清楚:
string c = (a ?? "") + (b ?? "");
或者,考虑到字符串连接中的 null 最终只是一个空字符串,只需编写:
string c = a + b;
编辑:关于记录的优先级,在两个C# 3.0 规范 http://download.microsoft.com/download/3/8/8/388e7205-bc10-4226-b2a8-75351c669b09/CSharp%20Language%20Specification.doc(Word 文档)和ECMA-334 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf,加法比 ?? 绑定更紧密,而 ?? 比赋值绑定更紧密。另一个答案中给出的 MSDN 链接是错误且奇怪的,IMO。 2008 年 7 月的页面上显示了一项更改,其中移动了条件运算符 - 但显然是错误的!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)