2008-09-19 47 views

回答

4
if (any == System.DBNull.Value) ... 

我更喜欢那个,只是因为我读过比较值而不是类型。

0

,如果你在C#中的时候,你应该使用==; is使用反射计算更昂贵,尤其是因为只有一个实例System.DBNull

+0

-1为不正确的语句`是使用反射`。使用`is`没有性能问题。 (更确切地说,通常所说的“使用反射”就是使用System.Reflection中的方法,这确实很慢,因此手动地将“is”用作“使用反射”是最好是误导性的,所以误导这个回答者假设结果一定是缓慢的。你是否真的**测试**这个假设?No.) – ToolmakerSteve 2014-08-20 22:01:24

-1

我喜欢“是System.DBNull”更多的是因为我比较讨厌的东西为NULL,并有它是真实的想法。许多其他的语法(什么是复数?)会有什么== NULL返回NULL。

据我所知,有DBNull.Value是有原因的。我知道。我列出我的偏爱:)

+0

咦?这是一个.Net问题。 `x == null`不返回`null`。做谷歌搜索,我还没有找到任何其他语言。也许你正在考虑float操作,其中`x == undefined`返回`undefined`。但是这与'null'不同。 `null'具有特定的含义,并且的确可以与之进行比较。有关这种比较意味着什么的更多细节,以及它是否是一个好主意,请参阅http://stackoverflow.com/questions/3507383/equalsitem-null-or-item-null(在C++中,从哪个的c#语法来了,通常需要与`null`进行比较。) – ToolmakerSteve 2014-08-20 22:12:33

+0

Hi @ToolmakerSteve!男孩这是一个古老的问题,你正在投入。它与数据有关,在SQL中比较(somevar = null)返回null。 – nathaniel 2014-10-15 19:19:42

11

我倾向于使用

if (DBNull.Value.Equals(value)) { 
    // 
} 

if (Convert.IsDBNull(value)) { 
    // 
} 
5

is作为Kevlar623说,不使用反射。它映射到IL中的isinst操作。在那个层面上,比较性能是愚蠢的,除非你正在研究导弹制导系统。

我用value is DBNull这听起来不错,作为一个偏执的开发者,我不能相信存在的唯一价值是DBNull.Value。错误发生。

+0

我会担心更多关于其他错误的信息,而不是仅仅具有“Value”值的密封系统类是否会以某种方式发出第二个值。不过,我同意你的看法,并不是因为我是偏执狂,而是因为对我心目中的DBNull.Value进行的测试表明,有**可能是其他一些DBNull的可能性。我*知道*没有,但为什么编写的代码听起来像是指特定的DBNull,而实际上只有一个?对我来说,总是显得很愚蠢。 – ToolmakerSteve 2014-08-20 22:24:04

-2

这是形式的一个很好的例子如下功能。无论哪个人更有效率地执行是一条路。它看起来像是,读起来像是,或者称之为坏名字是无关紧要的。有效地使用语言,不要将语言塑造成新的语言。