Martin Ch
Martin Ch

Reputation: 1367

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!

Upvotes: 12

Views: 31820

Answers (3)

Wiktor Zychla
Wiktor Zychla

Reputation: 48314

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.

Upvotes: 2

C.Evenhuis
C.Evenhuis

Reputation: 26446

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;

Upvotes: 17

Arnaud F.
Arnaud F.

Reputation: 8462

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

Upvotes: 1

Related Questions