我有一条线路出错:
无法确定条件表达式的类型,因为'string'和'int'之间没有隐式转换
param[0].Value = form_request_id == null ? DBNull.Value.ToString() : form_request_id;
但是,form_request_id是一个int
如何检查int数据类型中的空值?
答案 0 :(得分:3)
int
是一种值类型,不能是null
- 它将默认为0
。
您可以通过两种方式使int
成为可空:
int? nullableInt = null;
或者,
Nullable<int> nullableInt = null;
我认为,两种选择在最低级别基本相同,前者是后者的简写。
这实际上为类型提供了一个包装器,它公开了两个有用的属性HasValue
和HasValue
。 HasValue
可用于检查所包含的实例是否具有其他的值而不是null
,Value
允许您检索该值。
查看MSDN page on Nullable<T>
以获取更多信息和示例。
正如@Justin Niessner所指出的那样,您得到的错误消息与此问题无关,而是form_request_id
和DBNull.Value.ToString()
是不同类型的事实。如果form_request_id
不是null
,请尝试在其上调用ToString
(或使用其他一些机制来分配所需的不同类型的值。
答案 1 :(得分:1)
你的直接问题不在于你在form_request_id
中检查空值(实际上总是会评估为false,因为你真的需要使用int?
来实际为null的值) 。
真正的问题是条件表达式的两边都返回不同的类型(一个是字符串,另一个是int)。
由于param[0].Value
根据条件确实应该是不同的类型...你不能在这里使用快捷语句。你必须要说清楚:
if(form_request_id == null)
param[0].Value = DBNull.Value;
else
param[0].Value = form_request_id;
正如我之前提到的,您仍然需要使用int?
而不是int
,以便您的变量可以适当地保存空值。当你这样做时,你甚至不应该再需要该语句,因为数据库提供程序将看到一个空值并在幕后替换DBNull.Value
。代码只是:
param[0].Value = form_request_id;
答案 2 :(得分:1)
param[0].Value = nullableInt ?? DBNull.Value;
答案 3 :(得分:0)
可能类型的form_request_id不是int而是
int?//or
Nullable<int>
答案 4 :(得分:0)
您需要将int变量定义为Nullable类型,并且为了检查它是否为null,您需要使用HasValue。要使用x.Value
int? x = 10;
if (x.HasValue)
{
//code here
}
{{1}}
答案 5 :(得分:0)
int
类型不能为空。 int的默认值为0,因此如果要确保其值已设置,则可以检查0。