我很好奇使用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))
。
答案 0 :(得分:2)
value is DBNull
实际检查value
是DBNull
类的实例,而value == DBNull.Value
实际执行value
与唯一的实例之间的参考比较单身人士班DBNull
。
value is DBNull
检查value
是DBNull
的实例,只有在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的值。