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

时间:2015-01-06 11:19:47

标签: vb.net variables object member

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

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

这虽然有点长,但是如果wdsl改变并且对象集合内容发生变化(名称,类型等),它也会破坏。

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

我几乎所有这些都工作,直到我想将集合名称作为对象成员名称传递给循环,因为它显然没有在下面的示例中评估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()

1 个答案:

答案 0 :(得分:0)

这似乎已经使用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