使用反射获取类型

时间:2012-03-18 11:51:18

标签: c# reflection types

我正在尝试通过使用反射获取我的类的属性类型,但它返回我唯一的RuntimePropertyInfo - 作为类型的名称。

我有对象MyObject actualData - 它包含属性 - “name”作为字符串,“Item”作为我的类型DatumType

当我调试时,我可以看到,actualData有2个属性,第一个是字符串类型,第二个是DatumType,但是当我使用它时:

string typeName = actualData.getType().getProperty("Item").getType().Name - 它返回RuntimePropertyInfo,而不是DatumType

你能看出我做错了什么吗?我正在使用C# - .Net 4.0。 非常感谢!

3 个答案:

答案 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