2012-12-12 53 views
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 

任何有識之士在此我將非常感激。

+0

在這裏看到:http://stackoverflow.com/questions/997747/c-sharp-reflection-accessing-the-fields -of-A-結構 – igrimpe

+0

也:[地圖數據集到一個自定義的.NET對象(http://stackoverflow.com/questions/10618360/map-a-dataset-to-a-custom-net-object-in -asp-net) – sloth

回答

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(對象關係映射)「外的即用」

+0

謝謝你的建議 –