2011-04-21 118 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

相关问题