2016-05-19 26 views
3

我有一個方法可以接受可爲空的參數,因爲它是從具有空列的表中填充的。如何在一個方法中提供一個可爲空的參數?

private void test(int ID, int? value) 
{} 

調用此方法時,我需要一些方法來給它一個可空變量,還有就是我的問題。 我嘗試這樣做:

foreach (DataRow row in DataTable1.Rows) 
{ 
    test((int)row["ID"], (int?)row["value"]); 
} 

,但它給了我一個鑄造錯誤

「指定的轉換無效」

所以,我想這一點:

foreach (DataRow row in DataTable1.Rows) 
{ 
    test((int)row["ID"], (int)row["value"] ?? DBnull.Value); 
} 

和這個:

foreach (DataRow row in DataTable1.Rows) 
{ 
    test((int)row["ID"], (int)row["value"] ?? null); 
} 

但他們都給予我的錯誤

「操作?不能適用於int類型的操作數和空

最後一個我想是這樣的:

foreach (DataRow row in DataTable1.Rows) 
{ 
    test((int)row["ID"], (int?)row["value"] ?? null); 
} 

這一次編譯,但給人運行時錯誤

「指定的轉換無效」

那麼我該如何做到這一點? 這個想法是參數值用表中的一個值或null填充。

回答

7

可以使用DataRow擴展方法Field支持可空類型:使用as(安全鑄如果失敗,返回null

foreach (DataRow row in DataTable1.Rows) 
{ 
    int id = row.Field<int>("ID"); 
    int? value = row.Field<int?>("value"); 
    test(id, value); 
} 
3

嘗試:

test((int)row["ID"], row["value"] as int?); 
0
foreach (DataRow row in DataTable1.Rows) 
{ 
    var id = row["ID"] as int? ??default(int); 
    int? value = row["value"] as int? ??default(int?); 

    test(id, value); 
} 
相關問題