为什么有些方法可以工作而有些方法不能处理可为空的结构的空值?

naw*_*fal 13 .net c# struct nullable

开门见山:

int? i = null;
i.ToString(); //happy
i.GetType(); //not happy
Run Code Online (Sandbox Code Playgroud)

我得到一个非常相关的问题,它实际上解决了为什么i.ToString()工作正常.

编辑:刚刚发现这个角落的案例是这个SO线程中投票最多的案例!

Mik*_*ray 7

这是因为ToString虚拟而GetType不是虚拟.Nullables在CLR中有特殊的拳击行为.当你调用GetType一个可空的时候它被装箱(参见MSDN,实际上这种情况发生在任何情况下struct).但是,如果可以为空,则将基础值加框,而不是实际可为空.ToString另一方面调用ToString方法的覆盖Nullable<T>.另外,我会注意到这int? i = null是语法糖Nullable<int> i = new Nullable<int>().所以,你的变量中确实有一个对象i.