将变量作为成员名称传递给对象?

Pass a variable in as a member name to an Object?

不确定这是否可能,但我需要能够将变量的值作为对象的成员名称传递。

基本上我使用的 wdsl 有许多对象,其中一些对象可能包含一个集合,我需要制作数据网格来显示集合中的数据,这很简单,但目前我有为每个 object/collection 编写代码,定义有效列的数量及其名称和类型。

这虽然有点冗长,但效果很好,但如果 wdsl 发生变化并且对象集合内容发生变化(名称、类型等),它也会中断

我需要的是能够将一个对象名称传递给一个子对象,如果该对象包含一个集合(PropertyType 将包含 []),它会计算出来,读取它的名称并将该名称传递给一个循环将通过正确的级别检索 "column" 名称和数据类型。

我几乎完成了所有这些工作,直到我想将集合名称作为对象成员名称传递到循环中,因为它显然不会在下面的示例中评估 CollName 的字符串值,它只会出错说 CollName 不是对象的成员,当然它不是,但变量的实际值是。

    Sub IterateObject(objName)
    Dim CollName = ""
    For Each m As System.Reflection.PropertyInfo In objName.GetType().GetProperties()
        If m.CanRead Then
            If InStr(m.PropertyType.ToString, "[]") <> 0 Then
                CollName = m.Name
            End If
        End If
    Next
    For Each p As System.Reflection.PropertyInfo In objName.CollName(2).GetType().GetProperties()
        If p.CanRead Then
            If p.Name <> "ExtensionData" Then
                MsgBox(p.Name & " - " & (p.PropertyType.ToString))
            End If
        End If
    Next
End Sub

有没有有效的方法objName.(value of CollName)(2).GetType().GetProperties()

这似乎已经使用 CallByName 修复了它,让我可以用我需要的位创建一个新对象

Sub IterateObject(objName)
    Dim CollName = ""

    For Each m As System.Reflection.PropertyInfo In objName.GetType().GetProperties()
        If m.CanRead Then
            If InStr(m.PropertyType.ToString, "[]") <> 0 Then
                CollName = m.Name
            End If
        End If
    Next
    Dim CollObj
    CollObj = CallByName(objName, CollName, CallType.Get)
    For Each p As System.Reflection.PropertyInfo In CollObj(0).GetType().GetProperties()
        If p.CanRead Then
            If p.Name <> "ExtensionData" Then
                MsgBox(p.Name & " - " & (p.PropertyType.ToString))
            End If
        End If
    Next
End Sub