如何初始化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?);

实际上,这应该无关紧要,因为如果您在编译时不知道类型,则意味着您正在使用某种类型擦除(即转换为对象),这意味着装箱和可空值类型不不存在那里。您不能使用多态性,因为它不适用于值类型。

如果您认为您对此有合理需求,请随时在评论中解释您的用例。


以上是如何初始化System.Nullable&lt;Int32&gt;?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>