如果有以下方法檢查:類型上可空<int>
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作爲一個參數,類型檢查返回此參數錯誤。例如該代碼
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
使用可空,並傳遞null時,有沒有什麼辦法來保存類型的信息?我知道在這個例子中檢查類型是無用的,但它說明了這個問題。在我的項目中,我將參數傳遞給採用params object[]
數組的另一種方法,並嘗試識別對象的類型。此方法需要爲Nullable<int>
和Nullable<long>
做不同的事情。
由於b首先被裝箱到'int?',從而產生空引用。 – usr
假設你可以嘗試{}抓住{}來測試它,所以有一種方法可以找出答案。我敢打賭,你可以採取進一步的反思,並打磨它。也許初始化一個新的實例,應該給它一個默認值,並執行'typeof(variable.value)'? – NibblyPig
@SLC:你不行。它只是一個沒有類型信息的空引用。 – usr