可能性の重複をコンパイル:
C# okay with comparing value types to null比較 'INT' は
私は、私はちょうど今、C#(4.0)コンパイラで奇妙見つけるクロス何かが来ました。
int x = 0;
if (x == null) // Only gives a warning - 'expression is always false'
x = 1;
int y = (int)null; // Compile error
int z = (int)(int?)null; // Compiles, but runtime error 'Nullable object must have a value.'
あなたはint
にnull
を割り当てることができない場合は、なぜコンパイラは(それが唯一の警告を与える)あなたがそれらを比較することができるのですか?興味深いことに
struct myStruct
{
};
myStruct s = new myStruct();
if (s == null) // does NOT compile
;
なぜstruct
の例では、コンパイルされませんが、int
例はいますか?
でやろうとしているものです。コンパイラはおそらくこれを 'if(false)'にコンパイルします。正しいですが、 'x'は' null'になることはありません。 –
'?'これは 'intをコンパイルしませんか? y =(int)null; '実行時にこれは' int? y =(int?)null; 'あなたは'? 'が何をするのか理解していますか? – MethodMan
これも 'intをコンパイルしませんか? z =(int)(int?)null;エラーNullable型には値が必要ですが、 'intをコンパイルしますか? z =(int?)(int?)null; 'それをテストしてください。幸運と幸せコーディング – MethodMan