我正在尝试通过使用反射获取我的类的属性类型,但它返回我唯一的RuntimePropertyInfo - 作为类型的名称。
我有对象MyObject actualData - 它包含属性 - “name”作为字符串,“Item”作为我的类型DatumType
当我调试时,我可以看到,actualData有2个属性,第一个是字符串类型,第二个是DatumType,但是当我使用它时:
string typeName = actualData.getType().getProperty("Item").getType().Name
- 它返回RuntimePropertyInfo,而不是DatumType
你能看出我做错了什么吗?我正在使用C# - .Net 4.0。 非常感谢!
答案 0 :(得分:13)
您将获得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;
答案 1 :(得分:1)
在
actualData.getType().getProperty("Item")
检索PropertyInfo
类型的内容。
如果您再询问其类型:
actualData.getType().getProperty("Item").getType()
你得到了你所观察到的。
我怀疑最后getType()
不是必需的。
编辑:有人对这个答案进行了低估,这是不公平的。问题是“你能看出我做错了什么吗?”而过分为getType
的答案是正确的。如果询问者知道他做错了什么,那么在PropertyType
中查找PropertyInfo
就很容易了。
对于那个赞成这个答案的人:请至少在你下次投票时发表评论。 Stackoverflow只有在我们相互学习的情况下才有意义,而不仅仅是抨击周围的每个人。
答案 2 :(得分:1)
GetType()
总是返回当前对象的类型,而不是指向的对象。
在您的情况下,请考虑使用string typeName = actualData.getType().getProperty("Item").PropertyType.Name