2012-07-26 91 views
1

這看起來應該是非常簡單的。如何在c中將對象與null進行比較#

,如果我有:

object obj = *get value from somewhere* 

if(obj == null){ 
    MessageBox.Show("NULL"); 
} 

即使當我調試,並看到obj爲null,該代碼永遠不會進入if語句。

比較對象爲null時,你有做過不同的事情嗎? (因爲一個對象可以是任何類型?)

+7

目前,我只是不相信你。我懷疑你是在誤診某事。請製作一個簡短但完整的*程序來說明問題。 – 2012-07-26 20:11:59

+0

我假設代碼是'if(obj == null)'? – Pedro 2012-07-26 20:12:42

+0

有一個想法:在你的*實際代碼中,obj是實際靜態類型爲object的嗎?如果不是,那麼你可能會看到一些瘋狂的'=='超載行爲。要在超安全的一面,你總是可以使用'ReferenceEquals(obj,null)'代替。 – 2012-07-26 20:13:32

回答

13

好吧,註釋的給它遠離:

好的,在這樣做時,我注意到當我將鼠標懸停在調試模式下的變量上時,該值爲null,但是當它工作時,值爲{null} ... {null}是什麼意思?

這表明它實際上是一個包含單個空引用的數組(或可能是另一個集合類型),例如,

object obj = new object[] { null }; 

obj值是空引用,因此它不會進入if語句體。

你應該如何處理這取決於你想要達到的目標。你真的需要obj被靜態輸入爲object

+0

我相信如此...我想不出一個更好的方式來做到這一點。我正在嘗試使一種方法可以對任何(我選擇)類型的列表進行排序。 – Toadums 2012-07-26 20:25:36

+0

我打算obj = records [0] .GetValue(T),它返回一個字符串,int,Project,Phase或Client。出於某種原因,當階段爲空時,它被設置爲{null} ...即使它不是一個列表。那是什麼意思? (階段是一個自定義類)。哦,我正在使用FirstorDefault來獲得階段。默認...默認是{null}? – Toadums 2012-07-26 20:26:19

+0

@Toadums:你確定它沒有返回一個'Phase'對象,它以一種返回null的方式覆蓋'ToString'?如果你能展示一個簡短但完整的程序來展示這個問題,它將*非常有用。你應該從一開始就告訴我們這一切。 – 2012-07-26 20:34:45

10

你需要

if(obj == null){ 
    MessageBox.Show("NULL"); 
} 

基於

你寫的類型對象,而不是你的變量OBJ

UPDATE你的編輯(它會改變這個問題),你的代碼肯定會起作用。試試你的如果語句之前分配

obj = null; 

,並看到它進入MessageBox.Show()

這將證明如果不工作,你希望它應該。

更新2

@喬恩擊中它,你可能已經分配的數組一個元素,空了腦袋。它以這種方式顯示的原因是調試器試圖顯示數組。

如果陣列有例如兩個字符串元素「你好」和「世界」的調試器會顯示

{「你好」,「世界」}

由於數組只有一個元素,空,調試器可視化這是

{NULL}

+0

errr..ya,它在代碼中是obj。只是在將它寫出到stackoverflow時發生錯誤。 – Toadums 2012-07-26 20:12:09

+0

好的,在這樣做時,我注意到當我將鼠標懸停在調試模式下的變量上時,該值爲null,但是當它工作時,值爲{null} ... {null}是什麼意思? – Toadums 2012-07-26 20:15:55

相關問題