以下是一些示例代码:
static DateTime time;
if (time == null)
{
/* do something */
}
由于DateTime
不能为空,为什么这段代码会编译?
修改
问题不仅在于此代码将始终返回false,而且为什么在此类比较中允许使用DateTime
从不 null的内容。
答案 0 :(得分:6)
虽然time
属于非可空值类型,但可以将其转换为可空并与null
进行比较。比较将产生false
,这是一个有效的结果。
然而,这并不意味着它是一个很好的代码。工具,例如re:sharper,会标记此行,并显示警告说"表达式始终为假"。