vel*_*koz 15 .net c# nullable .net-4.0 c#-4.0
可能重复:
Nullable类型不是可空类型?
在以下代码中:
DateTime? dt = DateTime.Now;
MessageBox.Show(dt.GetType().ToString());
Run Code Online (Sandbox Code Playgroud)
消息框显示"System.DateTime",而不是Nullable<DateTime>.以下内容也返回false(因为GetType错误):
if (dt.GetType().IsAssignableFrom(typeof(DateTime?)))
...
Run Code Online (Sandbox Code Playgroud)
(顺便说一句,使用DateTime?或Nullable<DateTime>没有区别)在监视窗口中,您有"类型"列显示正确的类型(System.DateTime?).
在我的代码中,我引用了dt作为一个object,所以我需要正确地获取底层类型.我怎样才能做到这一点?
dig*_*All 12
在Nullable类型上调用GetType会导致在将类型隐式转换为Object时执行装箱操作.因此,GetType始终返回表示基础类型的Type对象,而不是Nullable类型.
所以基本上你的代码等于:
DateTime? dt = DateTime.Now;
object box = (object)dt;
Console.Write(box.GetType().ToString());
Run Code Online (Sandbox Code Playgroud)
另外,看看MSDN 上的"Boxing Nullable Types",我们读到:
如果对象是非null - 如果HasValue为true - 则发生装箱,但只有可以为空的对象所基于的基础类型被装箱.装箱非null可空值类型框的值类型本身,而不是包装值类型的System.Nullable(Of T).
这清楚地解释了"奇怪"的行为 Nullable<T>.GetType()