C# 指定的强制转换无效。(datatable中的整数值)

C# 指定的强制转换无效。(datatable中的整数值),c#,asp.net,casting,datatable,null,C#,Asp.net,Casting,Datatable,Null,我想检查datatable中的以下字段是否为空: r.Field<int>("prod_type") if (r.Field<int>("prod_type") != null && !string.IsNullOrEmpty(r.Field<int>("prod_type").ToString())) r.字段(“产品类型”) 如果(r.字段(“产品类型”)!=null&& !string.IsNullOrEmpty(r.Fie

我想检查datatable中的以下字段是否为空:

r.Field<int>("prod_type")

if (r.Field<int>("prod_type") != null && 
    !string.IsNullOrEmpty(r.Field<int>("prod_type").ToString()))
r.字段(“产品类型”)
如果(r.字段(“产品类型”)!=null&&
!string.IsNullOrEmpty(r.Field(“prod_type”).ToString())
但我有以下例外:

指定的强制转换无效


如何检查数据表中的整数值是否为null或空?

您得到的错误表明数据表中的字段不是
int
类型。如果它的类型是
int
它不能保持空值,您可以尝试使用
int?
这是一种

r.Field(“产品类型”)!=无效的
扩展方法支持可为空的类型。用于检查可空值是否为空:

if (r.Field<int?>("prod_type").HasValue)
if(r.Field(“产品类型”).HasValue)

如果
prod\u type
确实是数据库中的
int
字段,请尝试如下操作:

if (r.Field<int?>("prod_type") != null)
if(r.Field(“产品类型”)!=null)

@just\u name,那么它是
int?
,可以为null的int非常感谢。我可以将此方法用于任何类型,如
byte[]
,例如:
r.Field(“doc\u signed”)。HasValue
?@just\u name:是的,带有任何字符。默认情况下,字符串等引用类型是可为空的类型。hmmm我找不到
HasValue
r.Field(“doc_signed”)。HasValue
这是否语法正确?@just_name:抱歉,我忽略了数组,任何数组都是引用类型,即使包含的类型是值类型。因此,可以使用
r.Field(“doc\u signed”)
创建一个可为空的字节,但不能使用数组。这是一个引用类型,默认情况下可以为空:
如果(r.Field(“prod_type”)!=null)
if (r.Field<int?>("prod_type") != null)