這看起來應該是非常簡單的。如何在c中將對象與null進行比較#
,如果我有:
object obj = *get value from somewhere*
if(obj == null){
MessageBox.Show("NULL");
}
即使當我調試,並看到obj爲null,該代碼永遠不會進入if語句。
比較對象爲null時,你有做過不同的事情嗎? (因爲一個對象可以是任何類型?)
這看起來應該是非常簡單的。如何在c中將對象與null進行比較#
,如果我有:
object obj = *get value from somewhere*
if(obj == null){
MessageBox.Show("NULL");
}
即使當我調試,並看到obj爲null,該代碼永遠不會進入if語句。
比較對象爲null時,你有做過不同的事情嗎? (因爲一個對象可以是任何類型?)
好吧,註釋的給它遠離:
好的,在這樣做時,我注意到當我將鼠標懸停在調試模式下的變量上時,該值爲null,但是當它工作時,值爲{null} ... {null}是什麼意思?
這表明它實際上是一個包含單個空引用的數組(或可能是另一個集合類型),例如,
object obj = new object[] { null };
的obj
值是不空引用,因此它不會進入if
語句體。
你應該如何處理這取決於你想要達到的目標。你真的需要obj
被靜態輸入爲object
?
我相信如此...我想不出一個更好的方式來做到這一點。我正在嘗試使一種方法可以對任何(我選擇)類型的列表進行排序。 – Toadums 2012-07-26 20:25:36
我打算obj = records [0] .GetValue(T),它返回一個字符串,int,Project,Phase或Client。出於某種原因,當階段爲空時,它被設置爲{null} ...即使它不是一個列表。那是什麼意思? (階段是一個自定義類)。哦,我正在使用FirstorDefault來獲得階段。默認...默認是{null}? – Toadums 2012-07-26 20:26:19
@Toadums:你確定它沒有返回一個'Phase'對象,它以一種返回null的方式覆蓋'ToString'?如果你能展示一個簡短但完整的程序來展示這個問題,它將*非常有用。你應該從一開始就告訴我們這一切。 – 2012-07-26 20:34:45
你需要
if(obj == null){
MessageBox.Show("NULL");
}
基於
你寫的類型對象,而不是你的變量OBJ
UPDATE你的編輯(它會改變這個問題),你的代碼肯定會起作用。試試你的如果語句之前分配
obj = null;
,並看到它進入MessageBox.Show()
這將證明如果不工作,你希望它應該。
更新2
@喬恩擊中它,你可能已經分配的數組一個元素,空了腦袋。它以這種方式顯示的原因是調試器試圖顯示數組。
如果陣列有例如兩個字符串元素「你好」和「世界」的調試器會顯示
{「你好」,「世界」}
由於數組只有一個元素,空,調試器可視化這是
{NULL}
目前,我只是不相信你。我懷疑你是在誤診某事。請製作一個簡短但完整的*程序來說明問題。 – 2012-07-26 20:11:59
我假設代碼是'if(obj == null)'? – Pedro 2012-07-26 20:12:42
有一個想法:在你的*實際代碼中,obj是實際靜態類型爲object的嗎?如果不是,那麼你可能會看到一些瘋狂的'=='超載行爲。要在超安全的一面,你總是可以使用'ReferenceEquals(obj,null)'代替。 – 2012-07-26 20:13:32