DotNetDev
DotNetDev

Reputation: 25

access class property using a variable name that user input

so basically I have a class that similar to the following but much longer

Public Class inventory
    Public Property id As Integer
    Public Property name As String
End Class

and in other class I have a list of called order of class inventory so when I loop over the list I can do as

For Each i In orders
        Console.WriteLine(i.name)
Next

but I want a variable to be in the spot . so like

Dim rrr As String = Console.ReadLine()
For Each i In orders
     Console.WriteLine(i.rrr)
Next

however I get error as rrr is not a member in inventory! so please any one know how to solve that and be able to access the class from a variable let me know Thanks

Upvotes: 0

Views: 735

Answers (1)

Mary
Mary

Reputation: 15091

An answer is provided at Get property value from string using reflection in C# but it is C#. Following is vb.net translation.

Public Class inventory
    Public Property id As Integer
    Public Property name As String
    'I added a custom constructor to make filling a list easier for me
    Public Sub New(i As Integer, n As String)
        id = i
        name = n
    End Sub
    'add back default constructor
    Public Sub New()

    End Sub
End Class

Private orders As New List(Of inventory) From {New inventory(1, "Apples"), New inventory(2, "Oranges"), New inventory(3, "Pears")}

Private Sub OPCode()
    Dim rrr As String = "name" 'Console.ReadLine() as if user typed in name
    For Each i In orders
        Console.WriteLine(GetPropertyValue(i, rrr))
    Next
End Sub

Private Function GetPropertyValue(src As Object, PropName As String) As Object
    Return src.GetType().GetProperty(PropName).GetValue(src, Nothing)
End Function

Output:

Apples

Oranges

Pears

Upvotes: 1

Related Questions