我很好奇使用if(some_value is DBNull)与if(DBNull.Value.Equals(some_value))的利弊是什么。就我个人而言,我更喜欢if(some_value is DBNull),因为我发现它更具可读性。据if(DBNull.Value.Equals(some_value))介绍,我知道微软推荐使用https://msdn.microsoft.com/en-us/library/system.dbnull%28v=vs.110%29.aspx。
发布于 2016-07-14 12:17:29
我会选择DBNull.Value.Equals的方式。
为什么?
因为is将检查类型是否相等。它必须查找左手类型,并将其与右手类型相匹配,该类型也必须向上查找。之后,它可以比较这些类型,最有可能的方法是检查引用相等性。
这比仅仅检查引用相等性要低一些,而DBNull.Value.Equals就是这样做的。因为只有一个DBNull.Value实例,所以这个检查非常准确和快速。
发布于 2016-07-14 12:14:11
value is DBNull实际上检查value是否是DBNull类的实例,而value == DBNull.Value实际上在value和单例类DBNull的唯一实例之间执行引用比较。
value is DBNull检查value是否是DBNull的一个实例,这只有在value == DBNull.Value时才有可能,因为DBNull是单例的。
使用value == DBNull.Value的优点是它可以进行直接引用比较,这将比确定is DBNull比较的类型更有效。
发布于 2016-07-14 12:10:44
some_value is DbNull:检查some_value的类型和DBNull类型。如果您可以实例化DBNull的实例或继承它,则可以使用此方法。但是不,这个类有私有构造函数,并且是密封的。
DBNull.Value.Equals(some_value):检查some_value的值和由DBNull.Value表示的值。
https://stackoverflow.com/questions/38373783
复制相似问题