Reflect on a property of a property

G

Guest

I have a class that has a property of a type of another class. Like this:

Public Class Employee
Public Property Shift As Shift
' Get and set stuff
End Property
End Class

Public Class Shift
Public Property ShiftId As Integer
' Get and set stuff
End Property
End Class

Using reflection, I need to be able to get to the value contained in ShiftId
from looking at an Employee object. I've come close, but I cannot get the
right syntax. Here's what I have so far (this is in a base class):

Dim myType As Type=Me.GetType
For Each mi As MemberInfo In itemType.GetMembers(BindingFlags.Public Or _
BindingFlags.SetProperty Or BindingFlags.Instance Or _
BindingFlags.Static Or BindingFlags.NonPublic)
myType.GetProperty(mi.Name).GetValue(me,nothing).GetType.GetProperty("ShiftId").GetValue(

I'm stuck on the object to pass into the last GetValue call. I;m not sure
how to get a reference to the object contained in the outer class's property.
 
M

Mattias Sjögren

Barry,
Dim myType As Type=Me.GetType
For Each mi As MemberInfo In itemType.GetMembers(BindingFlags.Public Or _
BindingFlags.SetProperty Or BindingFlags.Instance Or _
BindingFlags.Static Or BindingFlags.NonPublic)
myType.GetProperty(mi.Name).GetValue(me,nothing).GetType.GetProperty("ShiftId").GetValue(

I'm stuck on the object to pass into the last GetValue call. I;m not sure
how to get a reference to the object contained in the outer class's property.

You're already getting the reference (with GetValue), you just have to
hold on to it

Dim shift As Object
Dim shiftId As Object
shift = myType.GetProperty(mi.Name).GetValue(me,nothing)
shiftId = shift.GetType.GetProperty("ShiftId").GetValue(shift,
Nothing)


Mattias
 
G

Guest

Mattias,
Thanks for your reply. I came to the same conclusion.
For posterity, I ended up overriding ToString in my classes to be able to
not have to go down a level.

Thanks,
Barry
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top