可能重複:
C# okay with comparing value types to null'詮釋' 相較於 '空' 編譯
我來到了一個跨東西,我在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.'
如果您不能分配null
到int
,爲什麼編譯器還允許你對他們比較(只給出了一個警告)?
有趣的是,編譯器不允許以下:
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;錯誤可空類型必須有一個值'但是這會編譯'int? z =(int?)(int?)null;'測試出來..祝您好運並且編碼愉快 – MethodMan