[英]What is the operator precedence of C# null-coalescing (??) operator?
我刚刚尝试了以下方法,其想法是将两个字符串连接起来,用一个空字符串代替空值。
string a="Hello";
string b=" World";
- 调试(有趣的是?是打印,并不完全有助于可读性......)
? a ?? "" + b ?? ""
->“你好”
正确的是:
? (a??"")+(b??"")
"Hello World"
我有点期待“Hello World”,或者如果 a 为空,则只是“World”。 显然,这与运算符优先级有关,可以用括号来克服,是否有任何地方记录了这个新运算符的优先级顺序。
(意识到我可能应该使用 stringbuilder 或 String.Concat)
谢谢。
永远不要依赖运算符优先级。 始终明确指定您希望代码如何运行。 当您回到您的代码时,请帮自己和他人一个忙。
(a ?? "") + (b ?? "")
这没有任何模棱两可的余地。 歧义是错误的温床。
有趣的是http://msdn.microsoft.com/en-us/library/6a71f45d.aspx和http://en.csharp-online.net/ECMA-334:_14.2.1_Operator_precedence_and_associativity给 ?? 赋予了不同的优先级。
微博:
ECMA:
我认为msdn一定是错误的,考虑:
string a = null;
string b = a ?? "foo";
// What is b now?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.