使用reflection获取类型
我正在尝试使用reflection获取我的类的属性类型,但它返回我唯一的RuntimePropertyInfo – 作为类型的名称。
我有对象MyObject actualData – 它包含属性 – “name”作为字符串,“Item”作为我的类型DatumType
当我调试时,我可以看到,actualData有2个属性,第一个是字符串类型,第二个是DatumType,但是当我使用它时:
string typeName = actualData.getType().getProperty("Item").getType().Name
– 它返回RuntimePropertyInfo,而不是DatumType
你能看出我做错了什么吗? 我正在使用C# – .Net 4.0。 非常感谢!
您将获得PropertyInfo
对象的类型getProperty()
返回。 尝试
string typeName = actualData.getType().getProperty("Item").PropertyType.Name;
如果您想要通过PropertyInfo
对象当前分配给对象的值的类型,您可以调用:
string typeName = actualData.getType().getProperty("Item").GetValue(actualData, null).GetType().Name;
但在这种情况下你也可以简单地打电话:
string typeName = actualData.Item.GetType().Name;
GetType()
始终返回当前对象的类型,而不是指向的对象。
在您的情况下,请考虑使用string typeName = actualData.getType().getProperty("Item").PropertyType.Name
该
actualData.getType().getProperty("Item")
检索PropertyInfo
类型的东西。
如果你那么问它的类型:
actualData.getType().getProperty("Item").getType()
你会得到你所观察到的。
我怀疑最后这个getType()
不是必需的。
编辑:有人投了这个答案,这是不公平的imho。 问题是“你能看出我做错了什么吗?” 而一个getType
太远的答案是正确的。 如果询问者知道他做错了什么,那么在PropertyInfo
查找PropertyType
就很容易了。
对于那个赞成这个答案的人:请至少在你下次投票时发表评论。 Stackoverflow只有在我们相互学习的情况下才有意义,而不仅仅是抨击周围的每个人。