【发布时间】:2015-01-06 11:19:46
【问题描述】:
不确定这是否可能,但我需要能够将变量的值作为对象的成员名称传递。
基本上我使用的 wdsl 有许多对象,其中一些对象可能包含一个集合,我需要制作数据网格来显示集合中的数据,这很简单,但目前我必须制作每个对象/集合的代码,用于定义有效列的数量及其名称和类型。
这很好用,虽然有点啰嗦,但如果 wdsl 发生变化并且对象集合内容发生变化(名称、类型等),它也会中断
我需要的是能够将对象名称传递给子对象,如果该对象包含集合(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()
【问题讨论】:
-
我不太关注并怀疑 XY 问题,但集合名称通常没有什么价值,集合中的类型 in 往往更有趣。可以根据空集合配置类型,但您需要从对象(而不是集合名称)开始,并且集合需要是通用的。一个 grody VB Collection 的数组列表不会告诉你任何关于项目类型的信息
-
我可能没有很好地解释,所以我将尝试举一个例子。我有一个来自 wdsl 的方法,它将返回一个类型为“SrvRef.RetrieveActiveSupplyChainsResponse”的对象,在对象浏览器中我可以深入到“ActiveSupplyChains”,它显示为 {Length=11},就像一个数组,它包含字段名称和值,在这种情况下,我需要在网格中显示 11 个结果。
-
现在已经建立了数组/集合名称(“ActiveSupplyChains”),我现在需要遍历“ActiveSupplyChains”以获取其中的字段名称和字段类型。如果上面的代码明确定义了成员名称,那么 objName.ActiveSupplyChains(2).GetType().GetProperties() 可以正常工作,但仅适用于集合名称为“ActiveSupplyChain”的情况。我需要能够提取这个(第一个反射循环实现并将其传递到第二个循环
标签: vb.net variables object member