如何初始化System.Nullable<Int32>?
c#
我需要一个 Nullable 类型,但如何初始化这样的变量?每当我尝试这样做时,它会自动转换为普通的 Int32。
Nullable<Int32> nullableInt32 = new Nullable<Int32>(3);
Console.WriteLine(nullableInt32.GetType()); // gives me System.Int32
这是一个错误吗?我怎样才能真正初始化 Nullable?
回答
来自微软的文档:
如果要判断实例是否为可空值类型,请不要使用 Object.GetType 方法获取要使用上述代码进行测试的 Type 实例。当您对可空值类型的实例调用 Object.GetType 方法时,该实例将装箱为 Object。由于装箱可空值类型的非空实例等效于装箱基础类型的值,因此 GetType 返回一个 Type 实例,该实例表示可空值类型的基础类型。
所以你int?被装箱到int,并GetType()在装箱的实例上被调用。
除非您在编译时知道类型并使用typeof,否则无法获得可空对象的类型:
var type = typeof(int?);
实际上,这应该无关紧要,因为如果您在编译时不知道类型,则意味着您正在使用某种类型擦除(即转换为对象),这意味着装箱和可空值类型不不存在那里。您不能使用多态性,因为它不适用于值类型。
如果您认为您对此有合理需求,请随时在评论中解释您的用例。