繁体   English   中英

使用反射获取类型

[英]Get type using 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;

actualData.getType().getProperty("Item")

检索PropertyInfo类型的东西。

如果你再询问它的类型:

actualData.getType().getProperty("Item").getType()

你得到了你所观察到的。

我怀疑最后这个getType()不是必需的。

编辑:有人投了这个答案,这是不公平的imho。 问题是“你能看出我做错了什么吗?” 并且将一个getType过多的答案是正确的。 如果询问者知道他做错了什么,那么在PropertyInfo查找PropertyType就很容易了。

对于那个赞成这个答案的人:请至少在你下次投票时发表评论。 只有当我们相互学习,而不仅仅是抨击周围的每个人时,Stackoverflow才有意义。

GetType()始终返回当前对象的类型,而不是指向的对象。

在您的情况下,请考虑使用string typeName = actualData.getType().getProperty("Item").PropertyType.Name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM