如果有以下方法:
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));
}
当我使用 null 作为参数调用此方法时,类型检查会为此参数返回 false。例如这段代码
DoSomethingWithTwoNullables(5, new Nullable<int>());
导致此输出:
Param a is Nullable<int>: True
Param a is int : True
Param b is Nullable<int>: False
Param b is int : False
使用 Nullable 并传递 null 时,有什么方法可以保留类型信息?我知道在这个例子中检查类型是没有用的,但它说明了问题。在我的项目中,我将参数传递给另一个采用params object[]
数组并尝试识别对象类型的方法。这种方法需要对Nullable<int>
和做不同的事情Nullable<long>
。