我有一个可空DateTime字段“出生日期”的现有代码以这样的方式解释处理DBNull?
info.BirthDate = (DateTime?)reader["Birthdate"];
这会导致“无效的转换”错误和它打破了这个HANDELING。好吧,我明白这是因为空值从SQL返回不同,是类型“DBNull的”
定为这竟然是
if (reader["Birthdate"] != DBNull.Value)
{
info.Birthdate = (DateTime)reader["Birthdate"];
}
有人能解释到底为什么这个工程?我特别是在DBNull的.Value部分丢失了。如果它返回为DBNull IS代码甚至可以在这个块内到达吗?
.... OH。好吧,因为这个属性是可以空的,所以它没有任何内容,并且这个块被跳过。我现在明白了。谢谢! – Evr 2013-03-14 15:58:22
第三个选项是'reader [“Birthdate”]作为DateTime?'。 (对第三种选择有有效的反对意见,并且也有赞成的有效论据,我宁愿避免这样的讨论:)) – hvd 2013-03-14 15:58:23
啊,对了,会的。说我可以在4分钟内。这是我第一篇帖子SO – Evr 2013-03-14 16:01:31