将变量作为成员名称传递给对象?
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
不确定这是否可能,但我需要能够将变量的值作为对象的成员名称传递。
基本上我使用的 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