【问题标题】:Variable class member assignment变量类成员赋值
【发布时间】:2013-06-10 21:59:04
【问题描述】:

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

【问题讨论】:

  • 你可以使用Dictionary(Of PointEnum, Double)
  • 您可能需要发送 System.Reflection 才能完成此操作。所以你有一个数字,你需要以某种方式将它翻译成给定Point 对象上的一个字段,是吗?然后你能得到那个字段的值并进行比较吗?
  • 是的,杰夫就是这个主意

标签: vb.net list class enumeration


【解决方案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

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

【讨论】:

  • 我要到早上才能看到代码,但谢谢你,我会试一试
猜你喜欢
  • 2015-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-06
  • 1970-01-01
  • 2011-05-16
  • 2011-10-20
  • 1970-01-01
相关资源
最近更新 更多