これは、特定の問題を解決するためのものではありません。単にコンパイラの質問です。
次のコードでコンパイル エラーが発生しないのはなぜですか? 参照型とプリミティブ型を比較しています。コンパイラが比較を行うには、null と false の両方を何かに解釈する必要があります。それとも、パーサーは単純にそのようなパターンをスキャンして false に置き換えますか?
if(null == false) { }
これは、特定の問題を解決するためのものではありません。単にコンパイラの質問です。
次のコードでコンパイル エラーが発生しないのはなぜですか? 参照型とプリミティブ型を比較しています。コンパイラが比較を行うには、null と false の両方を何かに解釈する必要があります。それとも、パーサーは単純にそのようなパターンをスキャンして false に置き換えますか?
if(null == false) { }
持ち上げられた比較演算子が使用されているため、正当です。a と a を比較するbool
と、とのnull
両方が暗黙的に変換され、比較演算子 forが使用されます。明らかに、常に false であるため、警告が表示されます。bool
null
Nullable<bool>
Nullable<bool>
言語仕様のセクション 7.10.6 (参照型等値演算子) には、次のように記載されています。
T が値型を表すことができたとしても、
x == null
構造は許可され、T が値型の場合、結果は単純に false と定義されます。
この規定では、コンパイラ エラーではなく、 である必要がnull == false
あります。false