使用带有int的c#Null合并运算符

本文关键字:c#Null 合并 运算符 int | 更新日期: 2023-09-27 18:01:39

我正在尝试在int上使用null合并运算符。当我在字符串上使用它时,它会起作用

UserProfile.Name = dr["Name"].ToString()??"";

当我尝试在像这样的int上使用它时

UserProfile.BoardID = Convert.ToInt32(dr["BoardID"])??default(int);

我收到这个错误消息

操作员"??"无法应用于类型为"int"answers"int"的操作数

我在使用它的地方找到了这篇博客文章http://davidhayden.com/blog/dave/archive/2006/07/05/NullCoalescingOperator.aspx具有int数据类型。有人能说出我做错了什么吗?

使用带有int的c#Null合并运算符

如果数据库中的dr["BoardID"]为NULL,我怀疑您真正想做的是将BoardID设置为0。因为如果dr["BoardID"]为空,请转换。ToInt32将失败。试试这个:

UserProfile.BoardID = (dr["BoardID"] is DbNull) ? 0 : Convert.ToInt32(dr["BoardID"]);

int永远不是null,因此对其应用??毫无意义。

实现您想要的目标的一种方法是TryParse:

int i;
if(!int.TryParse(s, out i))
{
    i = 0;
}

或者,由于您想要获得0default(int),您可以抛出if,因为在错误情况下TryParse的输出参数已经是default(int):

int i;
int.TryParse(s, out i);

您链接的文章在??的左侧没有int,而是int?。这是Nullable<int>的快捷方式,它支持null,因此??对它来说是有意义的

int? count = null;    
int amount = count ?? default(int); //count is `int?` here and can be null
是的,当然。。。因为CCD_ 15不能为空
它只有32位,所有组合都表示一个有效的整数。

如果希望可以为null,请改用int?。(这是System.Nullable<int>的缩写。(

在您的链接中,??运算符应用于可能具有null值的Nullable<int>(int?(。

空合并运算符的工作方式如下:

如果运算符左侧的值为null,则返回运算符右侧的值。Int是值类型,所以它永远不能有null值。这就是你出错的原因。

在本例中,int上使用??运算符链接的行为:

int? count = null;
int amount = count ?? default(int);

因此,在该示例中,int是可为null的

您只能在引用类型或可为null的值类型上使用null合并运算符。例如:stringint?请参见http://msdn.microsoft.com/en-us/library/ms173224.aspx