使用带有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数据类型。有人能说出我做错了什么吗?
如果数据库中的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;
}
或者,由于您想要获得0
或default(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
它只有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合并运算符。例如:string
或int?
请参见http://msdn.microsoft.com/en-us/library/ms173224.aspx