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

发布于 2024-11-03 08:02:38 字数 542 浏览 1 评论 0原文

我正在尝试将 MembershipUserCollection 转换为要在 GridView 中使用的 DataSet,并且我有这个帮助程序类,它将循环遍历所有成员资格行和属性并获取值和类型并将它们推入 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);
    }

感谢任何帮助。

I'm trying to convert a MembershipUserCollection to a DataSet to be used in a GridView and I have this helper class that will loop through all the membership rows and properties and get the values and types and shove them into DataRows.

It works while there is a value for the property, but when there is a null value, it breaks returning the message, "Object reference not set to an instance of an object.".

In this particular example, it breaks on the Comment field if when it's value is "null".

Here's my code where it occurs:

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

Any help is appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

独夜无伴 2024-11-10 08:02:38

GetType() 是一个实例方法。属性值返回 objectnull。对空引用的任何实例方法调用都会导致您收到错误。当您尝试在 null 属性(在您的情况下为 Comment 属性)上调用 GetType() 方法时,该方法会引发异常。

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

GetType() is an instance method. The property value returns either an object or null. Any instance method call on a null reference will cause the error you are receiving. The GetType() method is throwing the exception when you try to call it on a null property (in your case, the Comment property).

You should instead use oPropertyInfo.PropertyType to get the property type, (which is faster anyway).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文