繁体   English   中英

如何枚举或索引结构的属性

[英]How to enumerat or index the properties of a structure

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

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

从SQL读取器设置结构的属性值,该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

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

要“动态”访问字段,可以使用反射:

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(对象关系映射)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM