是DBNull与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))
。
我会去DBNull.Value.Equals
方式。
为什么?
怎么一回事,因为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
OR实例或从它继承,那么可以使用它。 但是,不,这个班有私人建设者,并且是密封的。
DBNull.Value.Equals(some_value)
针对由所表示的值的SOME_VALUE检查值 DBNull.Value
。