我在vb.net工作,我想知道是否有任何方法可以使用变量字符串进行类的成员赋值。要比较的字段由整数值表示,并基于枚举我想比较该整数表示的字段。例如,这是我想要完成的基本想法。
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
使用Points列表,我希望能够比较x,y或z,具体取决于传入程序的'enumValue'。
Dim PointList As New List(Of Point)
If PointList(0).[Enum].GetName(GetType(PointEnum), enumValue) < someValue Then
...
End If
PointList(0).[Enum].GetName(GetType(PointEnum), enumValue)
是我遇到麻烦的行..如果我的实际代码与x,y和z一样简单,我只会使用select case或if语句,不过我上课使用超过30个属性。提前感谢任何建议或解决方案
答案 0 :(得分:1)
如果所有类中的所有字段都是 PUBLIC ,那么您可以使用旧的CallByName()函数,这样可以很容易地编写/读取:
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")
Else
Debug.Print("Not Less Than")
End If
如果你真的想使用Reflection,或者字段不是Public,那么我有一个类似的例子here。