2010-10-20 64 views
2

我正在使用一些運行SQL查詢作爲參考的舊代碼。c#Object obj的值是{}。什麼是 」{}」?

在某些時候,它得到的東西,如:

sqlDataAdapter.Fill(dataSet); 
DataRow dataRow = dataSet.Tables[0].Rows[0]; 
Object obj = dataRow[fieldName]; 

舊代碼所做的:

string output; 
if (!string.IsNullOrEmpty(obj.ToString())) { output = obj.ToString(); } 
else { output = "Not Available"; } 

我改變他們:

output = obj as string ?? "Not Available" 

但有時,它打破了。正如我所懷疑的那樣,當參賽作品是int時,情況正在發生中斷。在這些案例中作爲int投射解決了這個問題。

然後當int類型爲沒有條目爲obj[fieldName]時出現另一個問題。當我通過調試器時,驚奇地發現obj不是null。在VS中,鼠標懸停顯示它的值爲{}

到底是什麼{}?我如何對它進行布爾測試?

(在舊的代碼,它出現在這種情況下返回.ToString()""按預期方式工作。)

回答

5

{}被打開和關閉括號和符號的對象的開始和結束的。因此,沒有特殊屬性的空對象被簡寫爲{}。調試器使用這種表示法來幫助您直觀地區分空對象,空字符串和空值。

如果您將鼠標懸停在obj[fieldName]之上,並且沒有fieldName的條目,調試器將不會在意這一點,它將顯示值obj。您將不得不使用立即窗口或手錶/ quickwatch。調試器只會看到你懸停在obj上,並假定你指的是數組本身,而不是指定索引處數組的內容。

+0

而且'obj == Object.Empty'測試沒有'Object.Empty'嗎?或者我可以創建一個'Object comparableEmpty = new Object()'? – Kache 2010-10-20 22:00:28

+0

不,因爲'Object'是一個引用類型,這意味着如果它存在,比較Object.Empty到你自己的對象將永遠是錯誤的。您可以使用'myObj.GetType().GetProperties()。Count == 0'或其一些變體,儘管開銷可能不值得。 – 2010-10-20 22:03:22

+0

感覺有點愚蠢如何沒有一個優雅的解決方案。如果它是一個引用類型,引用應該只是'null',就像一個很好的引用。 – Kache 2010-10-20 22:06:38

相關問題