PropertyInfo.GetValue (myObject, null) .GetType () возвращает «Ссылка на объект не установлена ​​для экземпляра объекта». - PullRequest
2 голосов
/ 21 апреля 2011

Я пытаюсь преобразовать MembershipUserCollection в DataSet, который будет использоваться в GridView, и у меня есть этот вспомогательный класс, который будет перебирать все строки и свойства членства, получать значения и типы и помещать их в DataRows.

Это работает, пока есть значение для свойства, но когда есть нулевое значение, оно прерывается, возвращая сообщение «Ссылка на объект не установлена ​​на экземпляр объекта.».

В этом конкретном примере он разбивается на поле «Комментарий», если его значение равно «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);
    }

Любая помощь приветствуется.

1 Ответ

7 голосов
/ 21 апреля 2011

GetType() - это метод экземпляра. Значение свойства возвращает либо object, либо null. Любой вызов метода экземпляра с нулевой ссылкой вызовет полученную ошибку Метод GetType() вызывает исключение, когда вы пытаетесь вызвать его для нулевого свойства (в вашем случае - для свойства Comment).

Вместо этого вы должны использовать oPropertyInfo.PropertyType, чтобы получить тип свойства (который в любом случае быстрее).

...