[英]Checking for nulls in an integer data type
我有一行显示错误:
无法确定条件表达式的类型,因为在'string'和'int'之间没有隐式转换
param[0].Value = form_request_id == null ? DBNull.Value.ToString() : form_request_id;
但是,form_request_id是一个int
如何检查int数据类型中的null?
int
是一个值类型,不能为null
默认为0
。
您可以通过两种方式使int
可为空:
int? nullableInt = null;
要么,
Nullable<int> nullableInt = null;
我认为,这两个选项在最低级别上基本相同,前者是后者的简写。
这实际上为该类型提供了一个包装器,该包装器公开了两个有用的属性HasValue
和HasValue
。 HasValue
可用于检查所包含的实例是否具有比其他值null
, Value
可以检索值。
检查Nullable<T>
上的MSDN页面,以获取更多信息和示例。
但是,正如@Justin Niessner指出的那样,您收到的错误消息与该问题无关,而与form_request_id
和DBNull.Value.ToString()
是不同类型的事实有关。 如果form_request_id
不为null
,则尝试对此调用ToString
(或使用其他某种机制来分配所需的不同类型的值。
param[0].Value = nullableInt ?? DBNull.Value;
您的直接问题不是您要检查form_request_id
空值(由于您确实需要使用int?
来使该值实际为空,因此它实际上总是评估为false)。
真正的问题是条件表达式的两侧返回不同的类型(一个是字符串,另一个是int)。
由于param[0].Value
实际上应该根据条件是不同的类型...您将无法在此处使用快捷方式语句。 您必须将其详细说明:
if(form_request_id == null)
param[0].Value = DBNull.Value;
else
param[0].Value = form_request_id;
如前所述,您仍然需要使用int?
而不是int
以便您的变量可以适当地保留null值。 当您这样做时,您甚至不需要该语句,因为数据库提供程序将看到一个空值,并在幕后为您替换DBNull.Value
。 该代码将是:
param[0].Value = form_request_id;
form_request_id的类型可能不是int,而是
int?//or
Nullable<int>
您需要将int变量定义为Nullable类型,并且要检查它是否为null,则需要使用HasValue。 为了访问可为空的变量的值,请使用x.Value
int? x = 10;
if (x.HasValue)
{
//code here
}
int
类型不能为null。 int的默认值为0,因此如果要确保已设置为0,则可以对照0进行检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.