[英]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.