2008-09-19 44 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

這是形式的一個很好的例子如下功能。無論哪個人更有效率地執行是一條路。它看起來像是,讀起來像是,或者稱之爲壞名字是無關緊要的。有效地使用語言,不要將語言塑造成新的語言。