14

これは、特定の問題を解決するためのものではありません。単にコンパイラの質問です。

次のコードでコンパイル エラーが発生しないのはなぜですか? 参照型とプリミティブ型を比較しています。コンパイラが比較を行うには、null と false の両方を何かに解釈する必要があります。それとも、パーサーは単純にそのようなパターンをスキャンして false に置き換えますか?

if(null == false) { }
4

3 に答える 3

28

持ち上げられた比較演算子が使用されているため、正当です。a と a を比較するboolと、とのnull両方が暗黙的に変換され、比較演算子 forが使用されます。明らかに、常に false であるため、警告が表示されます。boolnullNullable<bool>Nullable<bool>

于 2013-05-04T01:16:39.950 に答える
12

言語仕様のセクション 7.10.6 (参照型等値演算子) には、次のように記載されています。

T が値型を表すことができたとしても、x == null構造は許可され、T が値型の場合、結果は単純に false と定義されます。

この規定では、コンパイラ エラーではなく、 である必要がnull == falseあります。false

于 2013-05-04T02:15:47.420 に答える