繁体   English   中英

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

[英]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;

我认为,这两个选项在最低级别上基本相同,前者是后者的简写。

这实际上为该类型提供了一个包装器,该包装器公开了两个有用的属性HasValueHasValue HasValue可用于检查所包含的实例是否具有比其他nullValue可以检索值。

检查Nullable<T>MSDN页面,以获取更多信息和示例。

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM