PropertyInfo.GetValue(myObject, null).GetType() 返回“未将对象引用设置为对象的实例。”
我正在尝试将 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
GetType()
是一个实例方法。属性值返回object
或null
。对空引用的任何实例方法调用都会导致您收到错误。当您尝试在 null 属性(在您的情况下为 Comment 属性)上调用 GetType() 方法时,该方法会引发异常。您应该使用
oPropertyInfo.PropertyType
来获取属性类型(无论如何,这更快)。GetType()
is an instance method. The property value returns either anobject
ornull
. Any instance method call on a null reference will cause the error you are receiving. TheGetType()
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).