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))

is DBNull vs. DBNull.Value.Equals()

我会选择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 的值。