可能重复:
C# 可以将值类型与 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
示例可以?