我基本上试图实现一些ASP.Net控件(例如DropDownList
)使用的部分逻辑,以便接受迭代的通用数据源,并通过调用属性消耗每一行由用户指定。
这是在VB.Net中。示例如下:
Dim myObject As Object = getUnknownObject()
Dim propertyName As String = getUnknownPropertyNameForObject()
'Now given that myObject is an array of objects which possess the property given by propertyName '
For Each i As Object In myObject
Dim valueOfProperty As String = invokePropertyOfObject(myObject, propertyName)
'Do something with value'
Next i
我正在寻找invokePropertyOfObject
的实现,它将返回属性的值。我想要注意动态属性是在循环中调用的事实,因此可能存在与以这种方式使用反射相关的性能问题。
有谁知道做我想做的事情的理想方式是什么?如果可能的话,我想要一种只执行一次动态属性查找并在循环期间重复使用它的方法。是否可以这样做,请记住,虽然对象是未知的,但数组中的每个对象都是相同的类型。
答案 0 :(得分:2)
您可以在循环之前获取数组类型的PropertyInfo对象,然后可以对数组中的每个元素使用propertyInfo.GetValue()方法。这样你只能找到一次属性,但能够获得每条记录的价值。
答案 1 :(得分:1)
实际上,如果您别无选择,可以直接使用myObject.Property()
。最好将对象转换为正确的类型,以便使用该属性。
这是您的另一个选择:
Dim value as String = CallByName(myObject, propertyName, CallType.Get)