Person というタイプのオブジェクトのリストがあり、Person レコードを Excel シートにエクスポートしたいと考えています (VB.NET 用の独自の Excel コンポーネントを使用しています)。チェックボックスのあるフォームを使用して、ユーザーはどの Person プロパティをエクスポートするかを指定できます。
各チェックボックス (プロパティに対応) がチェックされているかどうかをチェックする巨大な if-then-else ツリーの代わりに、Person の各プロパティに対してブール値 (チェック/チェックなし) を保持するデータ構造を持っています。文字列としてのプロパティの名前。次に、次のように 2 つの for ループを使用します。
For Each p As Person In Persons
...
For Each item As ExportColumnData In ExportColumnTable
...
If item.Checked Then
...
Dim o As Object = CallByName(p, item.PropertyName, CallType.Get, Nothing)
SaveValueToExcelSheet(o)
...
End If
...
Next
...
Next
ただし、PropertyName を文字列として提供する CallByName を使用しているため、これはタイプ セーフではありません。同じことを達成できる、よりエレガントでタイプセーフな方法はありますか? これらの Person オブジェクトのプロパティを参照するには、何らかの方法 (文字列以外) が必要です。