2010-05-23 110 views
3
foreach (PropertyInfo PropertyItem in this.GetType().GetProperties()) 
    { 
     PropertyItem.SetValue(this, objDataTable.Rows[0][PropertyItem.Name.ToString()], null); 
    } 

在循環,我得到這個特殊的錯誤之一:轉換空值字符串 - C#.NET

類型的對象「System.DBNull」不能轉換爲類型「System.String」。

出現該錯誤是因爲數據庫中的某個字段沒有值(空),所以字符串屬性無法處理它。我怎樣才能將這個null轉換爲字符串?

I got this solution

如果你知道一個較短的或更好的,隨意張貼。我試圖避免檢查每個循環當前值是否爲空。

+0

最近才。 item == null? 「〜/ Content/images/default.jpg」:recent.item; – 2013-07-23 08:38:29

回答

5

Ben得到了它幾乎正確(我實際上認爲這只是從他身邊的「錯字」,但我不能編輯它)。這應該做的伎倆。

foreach (PropertyInfo PropertyItem in this.GetType().GetProperties()) 
    { 
     var value = objDataTable.Rows[0][PropertyItem.Name.ToString()]; 
     PropertyItem.SetValue(this, value == DBNull.Value ? "" : value.ToString() , null); 
    } 

而且你需要測試EN每次迭代,因爲它的值在給定的細胞在給定行真的沒有辦法避免檢查這些單元格的值的每一位使用

+2

合併運算符是否會將其縮短一點(值爲字符串)? string.Empty'(真正的問題,我不知道答案) – 2010-05-23 11:15:32

+0

不幸的是,它不會嚴格的空值,因爲DBNull.Value是一個對象,它不會工作。但它是一個很好的評論,我喜歡它 – 2010-05-23 11:33:36

+0

由於SO錯誤不能編輯帖子,所以生病的評論取而代之。如果你想使用空字符串,你可以在上面的例子SetValue(this,value.ToString(),null)中調用.ToString() – 2010-05-23 11:40:16

1

除了在有解除引用或方法調用的情況下檢查null之外,沒有其他解決方案。

如果PropertyItem.Name可以爲空或PropertyItem.SetValue不能接受一個空值,那麼你去檢查每一個循環。

+0

這似乎不是問題 - DBNull.Value.ToString()工作正常,並返回一個空字符串。 Property.SetValue()在嘗試將字符串類型的屬性設置爲DBNull.Value時產生異常。該檢查應該可能是objDataTable.Rows [0] [PropertyItem.Name.ToString()] == DBNull.Value。 – 2010-05-23 11:19:05

+0

@Daniel - 我用'PropertyItem.Name'爲空作爲例子。我會更正答案 – ChrisF 2010-05-23 11:23:50

0
foreach (PropertyInfo PropertyItem in this.GetType().GetProperties()) 
    { 
     string strValue = objDataTable.Rows[0][PropertyItem.Name.ToString()] == DbNull.Value ? String.Empty : objDataTable.Rows[0][PropertyItem.Name.ToString()].ToString(); 
     PropertyItem.SetValue(this, strValue, null); 
    } 
+0

它是'objDataTable.Rows [0] [strValue]''DbNull'不''PropertyItem.Name'我想。 – 2010-05-23 11:02:51

+0

我已經在此基礎上更新了我的答案。儘管如此,將其封裝在一個方法中會更好。 – 2010-05-23 11:09:04

+0

希望我是對的! PropertyItem.Name是面向反射而不是面向數據庫的,所以如果它使用DbNull.Value而不是null,我會感到驚訝。 – 2010-05-23 11:11:51