是 DBNull 与 DBNull.Value.Equals()
is DBNull vs. DBNull.Value.Equals()
我很好奇使用 if(some_value is DBNull)
与 if(DBNull.Value.Equals(some_value))
的优缺点是什么。
我个人更喜欢 if(some_value is DBNull)
因为我觉得它更具可读性。
我知道微软建议根据 https://msdn.microsoft.com/en-us/library/system.dbnull%28v=vs.110%29.aspx.
使用 if(DBNull.Value.Equals(some_value))
some_value is DbNull
:检查 some_value 的 type 与 DBNull
的类型。如果您可以实例化 DBNull
的实例或从它继承,则可以使用它。但是不,这个 class 有私有构造函数并且是密封的。
DBNull.Value.Equals(some_value)
:根据 DBNull.Value
.
表示的值检查 some_value 的 值
value is DBNull
实际上检查value
是否是DBNull
class的实例,而value == DBNull.Value
实际上执行[=11=之间的引用比较] 和单例的唯一实例 class DBNull
.
value is DBNull
检查 value
是否是 DBNull
的实例,这只有在 value == DBNull.Value
时才有可能,因为 DBNull
是单例。
使用 value == DBNull.Value
的优点是它进行直接引用比较,这比确定 is DBNull
比较的类型更有效。
我会选择 DBNull.Value.Equals
方式。
为什么?
因为 is
将检查类型是否相等。它必须查找左手类型并将其与它也必须查找的右手类型进行匹配。之后它可以比较类型,很可能是通过检查引用相等性。
这会比 DBNull.Value.Equals
只检查引用相等性效率低。由于 DBNull.Value
只有一次实例,因此此检查非常准确且非常快速。
我很好奇使用 if(some_value is DBNull)
与 if(DBNull.Value.Equals(some_value))
的优缺点是什么。
我个人更喜欢 if(some_value is DBNull)
因为我觉得它更具可读性。
我知道微软建议根据 https://msdn.microsoft.com/en-us/library/system.dbnull%28v=vs.110%29.aspx.
if(DBNull.Value.Equals(some_value))
some_value is DbNull
:检查 some_value 的 type 与 DBNull
的类型。如果您可以实例化 DBNull
的实例或从它继承,则可以使用它。但是不,这个 class 有私有构造函数并且是密封的。
DBNull.Value.Equals(some_value)
:根据 DBNull.Value
.
value is DBNull
实际上检查value
是否是DBNull
class的实例,而value == DBNull.Value
实际上执行[=11=之间的引用比较] 和单例的唯一实例 class DBNull
.
value is DBNull
检查 value
是否是 DBNull
的实例,这只有在 value == DBNull.Value
时才有可能,因为 DBNull
是单例。
使用 value == DBNull.Value
的优点是它进行直接引用比较,这比确定 is DBNull
比较的类型更有效。
我会选择 DBNull.Value.Equals
方式。
为什么?
因为 is
将检查类型是否相等。它必须查找左手类型并将其与它也必须查找的右手类型进行匹配。之后它可以比较类型,很可能是通过检查引用相等性。
这会比 DBNull.Value.Equals
只检查引用相等性效率低。由于 DBNull.Value
只有一次实例,因此此检查非常准确且非常快速。