我刚试过以下内容,想法是连接两个字符串,用空字符串替换空值.
string a="Hello"; string b=" World";
- 调试(有趣的是?是打印,并不完全有助于提高可读性......)
? a ?? "" + b ?? ""
- >"你好"
正确的是:
? (a??"")+(b??"") "Hello World"
我有点期待"Hello World",或者只是"世界",如果a为null.显然这是运算符优先级的todo,可以通过括号来克服,是否存在记录此新运算符的优先顺序的任何位置.
(意识到我应该使用stringbuilder或String.Concat)
谢谢.
除了你有什么喜欢的优先级是,它是根据ECMA,它是根据MS规格,什么CSC实际上并,我有意见的一位:
不要这样做.
我认为写起来要清楚得多:
string c = (a ?? "") + (b ?? "");
或者,假设字符串连接中的null最终只是一个空字符串,只需写:
string c = a + b;
编辑:关于记录的优先级,在C#3.0规范(Word文档)和ECMA-334中,加法绑定比绑定更严格,绑定比绑定更紧密.另一个答案中给出的MSDN链接是错误的,奇怪的,IMO.2008年7月页面上显示的更改移动了条件运算符 - 但显然不正确!
MSDN上记录了运算符优先级.
但是,MSDN的优先级与微软的可下载C#规范和ECMA 规范的优先级相矛盾.这有点奇怪.
无论如何,正如Jon Skeet在他的回答中所说,最好不要依赖运算符的优先级,而是通过使用括号来明确.
永远不要依赖运营商优先权.始终明确指定您希望代码的行为方式.当你回到你的代码时,请帮助自己和他人.
(a ?? "") + (b ?? "")
这没有留下任何歧义的余地.歧义是臭虫的滋生地.