如何在方法中传递可空参数?

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);
}  

and this :

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。

3个回答

6
你可以使用 DataRow 扩展方法 Field,支持可空类型:
foreach (DataRow row in DataTable1.Rows)
{
    int id = row.Field<int>("ID");
    int? value = row.Field<int?>("value");
    test(id, value);
}

2

尝试使用as (安全转换,如果失败则返回null):

test((int)row["ID"], row["value"] as int?);

1
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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接