首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何枚举或索引结构的属性

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

Stack Overflow用户
提问于 2012-12-12 16:28:20
回答 1查看 2.7K关注 0票数 1

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

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

结构的属性值是从SQL读取器设置的,SQL读取器读取在数据库表中设置的列。现在,理想情况下,希望按顺序遍历这些列值,并将它们写入结构的属性。

我的结构如下:

代码语言:javascript
运行
复制
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

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

代码语言:javascript
运行
复制
 Dim Struct as MyStructure
 For i as integer = 0 to 4
      Struct.i = "A value retrieved from database"
 Next i

主要的想法是,我想避免使用case语句:

代码语言:javascript
运行
复制
 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

任何关于这方面的见解都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-12 16:51:55

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

代码语言:javascript
运行
复制
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 (对象关系映射)“开箱即用”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13835633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档