在Nullable <int>上键入检查

ber*_*sch 5 c#

如果有以下方法:

static void DoSomethingWithTwoNullables(Nullable<int> a, Nullable<int> b)
{
    Console.WriteLine("Param a is Nullable<int>: " + (a is Nullable<int>));
    Console.WriteLine("Param a is int          : " + (a is int));
    Console.WriteLine("Param b is Nullable<int>: " + (b is Nullable<int>));
    Console.WriteLine("Param b is int          : " + (b is int));
}
Run Code Online (Sandbox Code Playgroud)

当我使用null作为参数调用此方法时,类型检查将为此参数返回false.例如这段代码

DoSomethingWithTwoNullables(5, new Nullable<int>());
Run Code Online (Sandbox Code Playgroud)

结果输出:

Param a is Nullable<int>: True
Param a is int          : True
Param b is Nullable<int>: False
Param b is int          : False
Run Code Online (Sandbox Code Playgroud)

有没有办法在使用Nullable并传递null时保留类型信息?我知道在这个例子中检查类型是没用的,但它说明了问题.在我的项目中,我将参数传递给另一个接受params object[]数组的方法,并尝试识别对象的类型.这个方法需要为Nullable<int>和做不同的事情Nullable<long>.

the*_*oop 5

直接找到潜在的问题,不,你不能这样做.null Nullable<int>与null 具有完全相同的盒装表示Nullable<long>,或者实际上是"正常"null.没有办法告诉它是什么类型的null,因为它的底层表示只是全零.有关详细信息,请参阅Boxing Nullable Types.