C# PropertyInfo.GetValue(myObject,null).GetType()返回;对象引用未设置为对象的实例。”;

C# PropertyInfo.GetValue(myObject,null).GetType()返回;对象引用未设置为对象的实例。”;,c#,reflection,properties,propertyinfo,C#,Reflection,Properties,Propertyinfo,我正在尝试将MembershipUserCollection转换为要在GridView中使用的数据集,我有一个helper类,它将循环遍历所有成员资格行和属性,获取值和类型,并将它们放入数据行中 当属性有值时,它工作,但当有空值时,它会中断并返回消息“Object reference not set to a instance of a Object.” 在这个特定的示例中,如果注释字段的值为“null”,则它将在注释字段上中断 以下是我的代码: foreach (PropertyInf

我正在尝试将MembershipUserCollection转换为要在GridView中使用的数据集,我有一个helper类,它将循环遍历所有成员资格行和属性,获取值和类型,并将它们放入数据行中

当属性有值时,它工作,但当有空值时,它会中断并返回消息“Object reference not set to a instance of a Object.”

在这个特定的示例中,如果注释字段的值为“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);
    }
foreach(PropertyInfo中的PropertyInfo操作属性信息)
{
键入oType=oPropertyInfo.GetValue(oData,null)。GetType();
GetType()
是一个实例方法。属性值返回一个
对象或
null
。对null引用的任何实例方法调用都将导致您收到的错误。
GetType()
方法在尝试对null属性(在您的示例中为Comment属性)调用异常时引发异常


您应该改为使用
oPropertyInfo.PropertyType
来获取属性类型(无论如何这会更快).

OP正在尝试获取
oData
类型
,而不是
oPropertyInfo
@hunter:
PropertyType
将返回属性定义要保存的类型。这是创建
数据表
的正确值,似乎OP正在尝试这样做。@hunter,
Type oType=oPropertyInfo.GetValue(oData,null).GetType()
sure看起来像是试图将属性类型设置为me@smartcaveman,我尝试使用
oPropertyInfo.PropertyType
,但当值为null时也会引发错误。必须有一种方法来处理null值。@Kahanu,您的错误一定是由
Convert.ChangeType引起的(opPropertyInfo.GetValue(oData,null),oType)
propertyInfo.PropertyType
没有绑定到实例为什么要尝试将类型更改为现有类型?这是我在网上获得的代码,现在我查看了它,我不知道为什么会有ChangeType方法。我真的只是尝试获取属性的类型并将其添加到数据行。