使用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只有在我们相互学习的情况下才有意义,而不仅仅是抨击周围的每个人。