is DBNull vs. DBNull.Value.Equals()
本文关键字:DBNull Equals Value vs is | 更新日期: 2023-09-27 17:57:00
我很好奇使用 if(some_value is DBNull)
与if(DBNull.Value.Equals(some_value))
有什么优缺点。就个人而言,我更喜欢if(some_value is DBNull)
因为我发现它更具可读性。我知道Microsoft建议根据 https://msdn.microsoft.com/en-us/library/system.dbnull%28v=vs.110%29.aspx 使用if(DBNull.Value.Equals(some_value))
。
我会选择DBNull.Value.Equals
的方式。
为什么?
Beacuse is
将检查类型是否相等。它必须查找左手类型并将其与它也必须查找的右手类型相匹配。之后,它可以比较类型,最有可能通过检查引用相等性。
这比只检查引用相等性的效率要低,DBNull.Value.Equals
这样做。由于只有一次DBNull.Value
实例,因此此检查非常准确且非常快速。
value is DBNull
实际上检查value
是否是DBNull
类的实例,而value == DBNull.Value
实际上在value
和单例类DBNull
的唯一实例之间执行引用比较。
value is DBNull
检查value
是否是DBNull
的实例,这只有在value == DBNull.Value
的情况下才有可能,因为DBNull
是单例。
使用 value == DBNull.Value
的优点是它可以进行直接引用比较,这比确定is DBNull
比较的类型更有效。
some_value is DbNull
:根据DBNull
类型检查some_value的类型。如果可以实例化 DBNull
的实例或从中继承,则可以使用此方法。但是不,这个类有私有构造函数并且是密封的。
DBNull.Value.Equals(some_value)
:根据 DBNull.Value
表示的值检查 some_value 的值。