我有一个类型为 Person 的对象列表,我想将 Person 记录导出到 excel 表(我正在使用 VB.NET 的专有 excel 组件)。使用带有复选框的表单,用户可以指定应该导出哪些 Person 属性。
我没有一个巨大的 if-then-else 树来检查每个复选框(对应于一个属性)是否已被选中,我有一个数据结构,其中对于 Person 中的每个属性我保留一个布尔值(选中/未选中)和字符串形式的属性名称。然后我使用两个这样的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
但是,这不是类型安全的,因为我使用 CallByName 提供 PropertyName 作为字符串。有没有更优雅和类型安全的方法可以实现相同的目标?我需要某种方式(不是字符串)来引用这些 Person 对象的属性。