C# 如何初始化系统。Nullable<;Int32>;?

C# 如何初始化系统。Nullable<;Int32>;?,c#,.net,C#,.net,我需要一个可为null的类型,但如何初始化这样的变量?每当我尝试这样做时,它会自动转换为正常的Int32 Nullable<Int32> nullableInt32 = new Nullable<Int32>(3); Console.WriteLine(nullableInt32.GetType()); // gives me System.Int32 Nullable nullableInt32=新的Nullable(3); Console.WriteLine(nul

我需要一个可为null的类型,但如何初始化这样的变量?每当我尝试这样做时,它会自动转换为正常的Int32

Nullable<Int32> nullableInt32 = new Nullable<Int32>(3);
Console.WriteLine(nullableInt32.GetType()); // gives me System.Int32
Nullable nullableInt32=新的Nullable(3);
Console.WriteLine(nullableInt32.GetType());//给我System.Int32
这是虫子吗?如何实际初始化空值?

来自:

如果要确定实例是否为可空值类型,请不要使用Object.GetType方法获取要使用前面代码测试的类型实例。在可为空值类型的实例上调用Object.GetType方法时,该实例将被装箱到Object。由于可空值类型的非空实例的装箱等同于基础类型的值的装箱,因此GetType返回表示可空值类型的基础类型的类型实例

因此,您的
int?
被装箱到
int
,并且在装箱的实例上调用
GetType()

除非您在编译时知道类型并使用
typeof
,否则无法获取可为空对象的类型:

var type = typeof(int?);
实际上,这并不重要,因为如果您在编译时不知道类型,这意味着您正在使用某种类型的擦除(即强制转换到对象),这意味着装箱,并且那里不存在可为null的值类型。不能使用多态性,因为它不适用于值类型

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

来自:

如果要确定实例是否为可空值类型,请不要使用Object.GetType方法获取要使用前面代码测试的类型实例。在可为空值类型的实例上调用Object.GetType方法时,该实例将被装箱到Object。由于可空值类型的非空实例的装箱等同于基础类型的值的装箱,因此GetType返回表示可空值类型的基础类型的类型实例

因此,您的
int?
被装箱到
int
,并且在装箱的实例上调用
GetType()

除非您在编译时知道类型并使用
typeof
,否则无法获取可为空对象的类型:

var type = typeof(int?);
实际上,这并不重要,因为如果您在编译时不知道类型,这意味着您正在使用某种类型的擦除(即强制转换到对象),这意味着装箱,并且那里不存在可为null的值类型。不能使用多态性,因为它不适用于值类型


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

int?nullableInt32=3
是编写所需内容的更快方法…)。有趣的是,
GetType()
将调用它的值类型装箱(因为它是在
对象
上定义的非虚拟方法),而
可为null的
将其装箱为正常的
int
。因此,
GetType
最终会被一个装箱的
int
调用,并返回
int
。这只是
GetType
的一个恼人的副作用:您正确地初始化了
Nullable
int?nullableInt32=3
是编写所需内容的更快方法…)。有趣的是,
GetType()
将调用它的值类型装箱(因为它是在
对象
上定义的非虚拟方法),而
可为null的
将其装箱为正常的
int
。因此,
GetType
最终会被一个装箱的
int
调用,并返回
int
。这只是
GetType
的一个恼人的副作用:你正确地初始化了一个
null
(“没有办法获得一个null对象的类型”——严格来说,你可以做
typeof(int?).GetGenericTypeDefinition().MakeGenericType(someType)
,但是就像你说的,你为什么要这么做呢?)出于某种特殊原因,人们希望让可空类型的实例检查大量类似的问题,比如——在获得属性的类型后,将其与手头的值进行比较要比深入挖掘类型更容易……(“无法获得可空对象的类型”——严格地说,您可以执行
typeof(int?)之类的操作.GetGenericTypeDefinition().MakeGenericType(someType)
,但正如您所说,您为什么要这样做呢?)出于特定的原因,人们希望让可为null类型的实例检查许多类似的问题,例如-在您获得属性的类型后,将其与手头的值进行比较比深入挖掘类型更容易。。。