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