爲什麼下面的代碼返回false?C#coalesce運算符
public static void Main()
{
bool? someCondition = true;
bool someConditionOverride = false;
bool? result = someCondition ?? someConditionOverride ? false : (bool?)null;
Console.WriteLine(result);
}
我exprecting結果將是true
,因爲someCondition
不null
和??
運營商將返回true
。不過看起來像右邊的操作數是先計算出來的,左邊的部分是簡單的忽略。
添加括號解決困惑:
bool? result = someCondition ?? (someConditionOverride ? false : (bool?)null)
而結果將是true
。不過,我仍然很好奇爲什麼左邊的部分在第一個例子中被忽略了。
[C#空合併(??)運算符的運算符優先級是什麼?](https://stackoverflow.com/questions/511093/what-is-the-operator-precedence-of-c-sharp- null-coalescing-operator)解釋它......可能可以用作重複。 –
這實際上是一個非常好的問題 –
只需讀取我期望首先評估的'''表達式,從而導致'false'返回。我不希望'?:'具有更高的優先級,就像我不希望'+'優先於'-' –