检查整数数据类型中的空值

时间:2011-06-20 15:55:53

标签: c# .net-4.0 null

我有一条线路出错:
无法确定条件表达式的类型,因为'string'和'int'之间没有隐式转换

param[0].Value = form_request_id == null ? DBNull.Value.ToString() : form_request_id; 

但是,form_request_id是一个int

如何检查int数据类型中的空值?

6 个答案:

答案 0 :(得分:3)

int是一种值类型,不能是null - 它将默认为0

您可以通过两种方式使int成为可空:

int? nullableInt = null;

或者,

Nullable<int> nullableInt = null;

我认为,两种选择在最低级别基本相同,前者是后者的简写。

这实际上为类型提供了一个包装器,它公开了两个有用的属性HasValueHasValueHasValue可用于检查所包含的实例是否具有其他的值而不是nullValue允许您检索该值。

查看MSDN page on Nullable<T>以获取更多信息和示例。

正如@Justin Niessner所指出的那样,您得到的错误消息与此问题无关,而是form_request_idDBNull.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。