我正在使用可空类型进行一些测试,但并没有达到我的预期:
int? testInt = 0; Type nullableType = typeof(int?); Assert.AreEqual(nullableType, testInt.GetType()); // not the same type
这也不起作用:
DateTime? test = new DateTime(434523452345); Assert.IsTrue(test.GetType() == typeof(Nullable)); //FAIL DateTime? test = new DateTime(434523452345); Assert.IsTrue(test.GetType() == typeof(Nullable<>)); //STILL FAIL
我的问题是为什么testInt.GetType()返回int,而typeof(int?)返回真正的可空类型?
根据MSDN:
在将类型隐式转换为Object时,对Nullable类型调用GetType会导致执行装箱操作。因此,GetType总是返回代表基础类型的Type对象,而不是Nullable类型。
当您将可为空的对象装箱时,仅将基础类型装箱。
同样,从MSDN:
将非null的可为空的值类型装箱,将值类型本身而不是包装该值类型的System.Nullable装箱。