【发布时间】:2016-06-01 14:50:11
【问题描述】:
说我有
int? x = SomeFunc();
我养成了说的习惯
if(x != null && x.HasValue)
{
// do somethign with x.Value;
}
但是一个代码分析工具让我觉得这两个条件是一样的。我看了看,其实他们是
如果
int? x = null;
x==Null; // true
x.HasValue // false
那么为什么要对同一事物进行两种测试呢?有没有我遗漏的细微差别?
【问题讨论】:
-
我想你的意思是
x.HasValue // false -
x==Null 在 OO 概念中是错误的,但它可以工作,因为 Nullable
结构有一个例外。否则 C# 中的结构永远不能为空。因此作为总结,两者都可以正常工作,但根据面向对象的定义,检查 HasValue 更正确。