【发布时间】:2012-01-28 16:53:41
【问题描述】:
在尝试设置从Comments 中的数据库返回的NULL 值时,我为什么会得到一个无效的强制转换异常,它的类型是Int32。
我正在尝试替换这个:
try
{
objStreamItem.Comments = (Int32)sqlReader["Comments"];
if (objStreamItem.Comments > 0) {
listComments = Comment.GetAll(objStreamItem.Id);
}
}
catch (InvalidCastException)
{
// Execute if "Comments" returns NULL
listComments = null;
objStreamItem.Comments = 0;
}
有了这个:
Comments = ((Int32?)sqlReader["Comments"]) ?? 0
两者处于不同的上下文中,但您应该明白这一点。我试图以更优雅的方式解决这个问题,而不是使用 try catch 块。
谢谢。
更新
它在数据库中存储为可以为空的整数。
public int? Comments
{
get;
set;
}
我只想感谢所有回答或发布此问题的人,一切都非常有用。谢谢!
【问题讨论】:
-
Comments是否定义为可为空? -
您的 cmets 是否真正存储为整数或文本/字符串/varchar..?还请显示您第一次声明 Comments 的位置是可空类型,只是好奇
-
它是否作为 DBNull 返回?
-
请检查更新。谢谢
-
如果它已经存储为
int?,为什么还要转换它?
标签: c# asp.net .net sql-server null-coalescing-operator