C# 如何在方法中提供可为null的参数?

C# 如何在方法中提供可为null的参数?,c#,nullable,C#,Nullable,我有一个方法可以接受可为null的参数,因为它是从具有可为null的列的表中填充的 private void test(int ID, int? value) {} 当调用此方法时,我需要某种方法为其提供一个可为null的变量,这就是我的问题。 我试过这个: foreach (DataRow row in DataTable1.Rows) { test((int)row["ID"], (int?)row["value"]); } foreach (DataRow row in Dat

我有一个方法可以接受可为null的参数,因为它是从具有可为null的列的表中填充的

private void test(int ID, int? value)
{}
当调用此方法时,我需要某种方法为其提供一个可为null的变量,这就是我的问题。 我试过这个:

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"]);
}
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和null类型的操作数

我最后试过的是:

foreach (DataRow row in DataTable1.Rows)
{
    test((int)row["ID"], (int?)row["value"] ?? null);
}
这一个编译,但给出运行时错误

“指定的强制转换无效”

那我该怎么做呢?
其思想是使用表中的值或null来填充参数值。

您可以使用支持可空类型的
DataRow
扩展方法:

foreach (DataRow row in DataTable1.Rows)
{
    int id = row.Field<int>("ID");
    int? value = row.Field<int?>("value");
    test(id, value);
}
foreach(DataTable1.Rows中的DataRow行)
{
int id=行字段(“id”);
int?值=行字段(“值”);
测试(id、值);
}
尝试使用(如果失败,返回
null
的安全强制转换):