我有一个可以接受可为空参数的方法,因为它是从具有可空列的表中填充的。
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类型的操作数和null
我试过的最后一个是:
foreach (DataRow row in DataTable1.Rows)
{
test((int)row["ID"], (int?)row["value"] ?? null);
}
这个编译但是给出了运行时错误
“指定的演员表无效”
那我怎么能这样做? 我们的想法是参数值用表中的值填充或用null填充。
答案 0 :(得分:7)
您可以使用支持可空类型的DataRow
扩展方法Field
:
foreach (DataRow row in DataTable1.Rows)
{
int id = row.Field<int>("ID");
int? value = row.Field<int?>("value");
test(id, value);
}
答案 1 :(得分:3)
尝试使用as
(如果失败则返回null
的安全强制转换):
test((int)row["ID"], row["value"] as int?);
答案 2 :(得分: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);
}