简体   繁体   中英

Get type using reflection

I am trying get type of property of my class by using of reflection but its returning my only RuntimePropertyInfo - as a name of a type.

I have object MyObject actualData - it contains property - "name" as string and "Item" as my type DatumType

When I am debugging I can see, that actualData has 2 properties, first one is type of string and second one is DatumType, but when I use this:

string typeName = actualData.getType().getProperty("Item").getType().Name - it returns me RuntimePropertyInfo, not DatumType

Can you see what am I doing wrong? I am using C# - .Net 4.0. Thanks a lot!

You're getting the type of the PropertyInfo object getProperty() returns. Try

string typeName = actualData.getType().getProperty("Item").PropertyType.Name;

If you want the type of the value currently assigned to the object via the PropertyInfo object, you could call:

string typeName = actualData.getType().getProperty("Item").GetValue(actualData, null).GetType().Name;

But in that case you could also simply call:

string typeName = actualData.Item.GetType().Name;

The

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

retrieves something of type PropertyInfo .

If you then ask for its type:

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

you get exactly what you observe you get.

I suspect this last getType() is not necessary then.

Edit: someone has downvoted this answer which is unfair imho. The question is "Can you see what am I doing wrong?" and the answer of being one getType too far is a correct one. Finding PropertyType in PropertyInfo is then easy if the asking person knows what he is doing wrong.

To the person who downvoted this answer: please at least leave a comment next time you downvote something. Stackoverflow makes sense only if we learn from each other, not just bash everyone around.

GetType() return always the type of the current object, not the pointed object.

In your case, consider using string typeName = actualData.getType().getProperty("Item").PropertyType.Name

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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