考虑以下代码:
int? x = null;
Console.Write ("Hashcode: ");
Console.WriteLine(x.GetHashCode());
Console.Write("Type: ");
Console.WriteLine(x.GetType());
执行时,它会写入Hashcode是0,但在尝试确定x的类型时会因NullReferenceException而失败。我知道对可空类型调用的方法实际上是在基础值上调用的,因此我预计程序会在x.GetHashCode()期间失败。
那么,这两种方法之间的根本区别是什么,为什么第一个不会失败?
GetHashCode
是virtual
... - Bart FriederichsNullable<int>
中调用GetType()
返回的是System.Int32
,而不是System.Nullable<System.Int32>
。 - Lasse V. Karlsenint? x = null
是Nullable<int> x = new Nullable<int>(null)
的语法糖。因此,x
是一个实际的对象,而不是一个空引用。 - Bart Friederichs