なぜ次のコードがfalseを返すのですか?C#coalesce演算子
public static void Main()
{
bool? someCondition = true;
bool someConditionOverride = false;
bool? result = someCondition ?? someConditionOverride ? false : (bool?)null;
Console.WriteLine(result);
}
私はsomeCondition
がnull
ないと??
オペレータがtrue
を返しますので、結果は、true
なりますexprectingました。しかし右のオペランドが最初に計算され、左の部分が単に無視されるように見えます。ブラケットを追加
は混乱修正:
bool? result = someCondition ?? (someConditionOverride ? false : (bool?)null)
を、結果はtrue
になります。しかし、私はまだ最初の例では左の部分が無視されていたのは不思議です。
[C#null-coalescing(??)演算子の演算子の優先順位は何ですか?](https://stackoverflow.com/questions/511093/what-is-the-operator-precedence-of-c-sharp- null-coalescing-operator)はそれを説明します...恐らく重複として使用することができます。 –
これは実際には本当に良い質問 –
単に式を読んだだけで、 '??'が最初に評価され、 'false'が返されると考えられます。私は、 '?:'が ' - 'より優先されるとは思わないのと同じように、 '?:'の優先順位が高くなるとは思わないでしょう。 –