1

我在 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

通过点列表,我希望能够根据传递给程序的“枚举值”来比较 x、y 或 z。

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 多个属性。提前感谢您的任何建议或解决方案

4

1 回答 1

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

如果你真的想使用反射,或者如果字段不是公共的,那么我在这里有一个类似的例子。

于 2013-06-10T22:45:24.160 回答