是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 。
