Reputation: 1367
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
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
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
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