是DBNull与DBNull.Value.Equals()

时间:2016-07-14 12:06:25

标签: c# dbnull

我很好奇使用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))

3 个答案:

答案 0 :(得分:2)

value is DBNull实际检查valueDBNull类的实例,而value == DBNull.Value实际执行value与唯一的实例之间的参考比较单身人士班DBNull

value is DBNull检查valueDBNull的实例,只有在value == DBNull.Value时才有效,因为DBNull是单身。

使用value == DBNull.Value的优点是它可以进行直接参考比较,这比确定is DBNull比较的类型更有效。

答案 1 :(得分:2)

我会选择DBNull.Value.Equals方式。

为什么?

Beacuse is将检查类型是否相等。它必须查找左手类型并将其与右手类型匹配,它也必须查找。之后,它可以比较类型,最有可能通过检查参考相等性。

这比检查DBNull.Value.Equals所做的参考相等性效率低。由于只有DBNull.Value的一次实例,因此此检查非常准确且非常快。

答案 2 :(得分:0)

some_value is DbNull:根据DBNull的类型检查some_value的类型。如果您可以实例化DBNull的实例或从中继承,则可以使用此方法。但不,这个班级有私人建设者并且是密封的。

DBNull.Value.Equals(some_value):根据DBNull.Value代表的值检查some_value的