1

一段时间以来,我一直想知道是否可以枚举、设置和索引对象或结构的属性。

我目前有一组用于不同报告的自定义图形生成器类,但它们都接受相同的结构作为参数。

结构的属性值从 SQL 读取器中设置,该读取器读取在数据库表中设置的列。现在理想情况下希望依次循环这些列值并将它们写入结构的属性。

我的结构如下:

Public Structure MyStructure
    Dim GraphName As String
    Dim GraphValue As Integer
    Dim Red As Integer
    Dim Green As Integer
    Dim Blue As Integer
End Structure

现在我希望能够遍历这些属性并为每个属性分配值。例如:

 Dim Struct as MyStructure
 For i as integer = 0 to 4
      Struct.i = "A value retrieved from database"
 Next i

主要思想是我想避免使用 case 语句:

 Dim Struct as MyStruct
 For i as integer = 0 to 4
      Select Case i
          Case 0
          Struct.GraphName  = "A value retrieved from database"
          Case 1
          Struct.GraphValue = "A value retrieved from database"
          'Etc.
      End Select
 Next i

对此的任何见解将不胜感激。

4

1 回答 1

0

要“动态”访问字段,您将使用反射:

Private Structure foo
    Public i As Integer
    Public s As String
End Structure

Private Sub bar()

    Dim f As foo
    Dim fields = GetType(foo).GetFields(BindingFlags.Public Or BindingFlags.Instance)
    For Each fi As FieldInfo In fields
        fi.SetValue(f, GetValueFromDBForName(fi.Name))
    Next

End Sub

请注意,反射并不快。“FasterFlect”(通过 NuGet)或其他“快速”替代品可能是一种替代方案。或者您考虑使用“开箱即用”的 ORM(对象关系映射)

于 2012-12-12T08:51:54.867 回答