2011-04-21 56 views
2

我試圖將MembershipUserCollection轉換爲要在GridView中使用的DataSet,並且我有這個幫助器類,它將遍歷所有成員行和屬性,並獲取值和類型並將它們推送到DataRows中。PropertyInfo.GetValue(myObject,null).GetType()返回「對象引用未設置爲對象的實例」。

它在屬性值存在的情況下工作,但當存在空值時,它會中斷返回消息「未將對象引用設置爲對象實例」。

在這個特殊的例子中,如果它的值是「null」,它將在註釋字段中斷。

這裏是我的代碼,它發生:

foreach (PropertyInfo oPropertyInfo in PropertyInfos) 
    { 
     Type oType = oPropertyInfo.GetValue(oData, null).GetType(); <-- error 
     oDataRow[oPropertyInfo.Name.ToString()] = Convert.ChangeType(oPropertyInfo.GetValue(oData, null), oType); 
    } 

任何幫助表示讚賞。

+0

你爲什麼試圖改變它的類型? – 2011-04-21 19:47:49

+0

這是我在網上得到的代碼,現在我看它,我不知道爲什麼ChangeType方法在那裏。我真的只是試圖獲取該屬性的類型並將其添加到數據行。 – Kahanu 2011-04-23 17:56:41

回答

7

GetType()是一種實例方法。該屬性值返回objectnull。對空引用的任何實例方法調用都會導致您收到的錯誤。當您嘗試在空屬性(在您的情況下,Comment屬性)上調用它時,GetType()方法拋出異常。

您應改爲使用oPropertyInfo.PropertyType來獲取屬性類型(無論如何,它會更快)。

+0

OP正試圖獲得'oData'類型'不'oPropertyInfo' – hunter 2011-04-21 19:44:22

+0

@hunter:'PropertyType'將返回該屬性被定義的類型。這是創建一個DataTable的正確值,它似乎是OP正在嘗試做的事情。 – 2011-04-21 19:47:21

+0

@hunter,'類型oType = oPropertyInfo.GetValue(oData,null).GetType()'確實看起來像試圖獲得屬性類型給我 – smartcaveman 2011-04-21 19:48:45

相關問題