Advertise with us

Variable class member assignment

Hi Developers, 

How to use a variable string for member assignment of a class. The field to be compared is represented by an integer value, and based off of an enumeration I want to compare the field represented by that integer. For example, here is the basic idea of what I am trying to accomplish.

My line of code as following

Public Class Point
   Public X As Double
   Public Y As Double
   Public Z As Double
End Class

Public Enum PointEnum As Short
   X = 0
   Y = 1
   Z = 2
End Enum

With a list of Points, I want to be able to compare x, y, or z depending on 'enumValue' that is passed into the program.

Dim PointList As New List(Of Point)
If PointList(0).[Enum].GetName(GetType(PointEnum), enumValue) < someValue Then
End If

The PointList(0).[Enum].GetName(GetType(PointEnum), enumValue) is the line I am having trouble with.. If my actual code were as simple as having x, y, and z I would just use a select case or if statements, however the class I am using has over 30 properties. 

Any help appreciated.
Last updated:6/12/2013 8:00:31 AM

1 Answers


Hi Mark,

If all the fields in the classes are PUBLIC as shown, then you can use the legacy CallByName() function, which makes it really easy to write/read:

    Dim PointList As New List(Of Point)
    PointList.Add(New Point() With {.X = 1.0, .Y = 2.0, .Z = 3.0})
    PointList.Add(New Point() With {.X = 3.0, .Y = 6.0, .Z = 9.0})
    PointList.Add(New Point() With {.X = 4.0, .Y = 8.0, .Z = 12.0})
    Dim enumValue As PointEnum = PointEnum.Z
    Dim someValue As Double = 5
    If CallByName(PointList(0), enumValue.ToString, CallType.Get) < someValue Then
        Debug.Print("Less Than")
        Debug.Print("Not Less Than")
    End If

If you'd really like to use Reflection, or if the fields are not Public, then I have a similar example here.