Vb.net 变量类成员赋值

Vb.net 变量类成员赋值,vb.net,list,class,enumeration,Vb.net,List,Class,Enumeration,我在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

我在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
通过点列表,我希望能够根据传递到程序中的“enumValue”比较x、y或z

Dim PointList As New List(Of Point)
If PointList(0).[Enum].GetName(GetType(PointEnum), enumValue) < someValue Then
   ...
End If
Dim PointList作为(点的)新列表
如果点列表(0)。[Enum].GetName(GetType(PointEnum),enumValue)

PointList(0)。[Enum].GetName(GetType(PointEnum),enumValue)
是我遇到问题的行。。如果我的实际代码像x、y和z一样简单,我只会使用select case或If语句,但是我使用的类有30多个属性。提前感谢您提供的任何建议或解决方案

如果类中的所有字段都是公共的,如图所示,那么您可以使用传统的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
Dim PointList作为(点的)新列表
添加(带有{.X=1.0、.Y=2.0、.Z=3.0}的新点())
添加(带有{.X=3.0、.Y=6.0、.Z=9.0}的新点())
添加(带有{.X=4.0、.Y=8.0、.Z=12.0}的新点())
Dim enumValue为PointEnum=PointEnum.Z
将值设置为Double=5
如果CallByName(PointList(0)、enumValue.ToString、CallType.Get)

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

如果类中的所有字段都是公共的,如图所示,那么您可以使用传统的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
Dim PointList作为(点的)新列表
添加(带有{.X=1.0、.Y=2.0、.Z=3.0}的新点())
添加(带有{.X=3.0、.Y=6.0、.Z=9.0}的新点())
添加(带有{.X=4.0、.Y=8.0、.Z=12.0}的新点())
Dim enumValue为PointEnum=PointEnum.Z
将值设置为Double=5
如果CallByName(PointList(0)、enumValue.ToString、CallType.Get)

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

您可以使用
字典(PointEnum,Double)
您可能需要突破
System.Reflection
来完成此操作。所以你有一个数字,你需要以某种方式将它转换成给定
对象上的一个字段,是吗?然后你可以得到该字段的值并进行比较吗?是的,Jeff,这是一个想法。你可以使用
字典(PointEnum,Double)
你可能需要突破
系统反射来完成这项工作。所以你有一个数字,你需要以某种方式将它转换成给定
对象上的一个字段,是吗?然后你能得到那个字段的值并比较它吗?是的,杰夫,这是一个想法。早上之前我不会按照代码来做,但谢谢你,我会照的。我早上之前不会按照代码来做,但谢谢你,我会照一下