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

Reflection は高速ではないことに注意してください。"FasterFlect" (NuGet 経由) またはその他の "高速" 置換が代替手段になる場合があります。または、「すぐに使える」ORM (オブジェクト リレーショナル マッピング) の使用を検討している

于 2012-12-12T08:51:54.867 に答える