2

我基本上是在尝试实现一些 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将返回他属性值的实现。我想注意动态属性是在循环中调用的,因此以这种方式使用反射可能会出现性能问题。

有谁知道做我想做的事情的理想方式是什么?如果可能的话,我想要一种只执行一次动态属性查找并在循环期间重复使用它的方法。是否可以这样做,请记住,虽然对象是未知的,但数组中的每个对象都是相同的类型。

4

2 回答 2

2

您可以在循环之前获取数组类型的 PropertyInfo 对象,然后可以对数组中的每个元素使用 propertyInfo.GetValue() 方法。这样,您只能找到该属性一次,但能够获取每条记录的值。

于 2013-01-24T12:54:09.190 回答
1

myObject.Property()其实,如果没有其他选择,你可以直接使用。最好将对象转换为正确的类型以便使用该属性。

这是您的另一个选择:

Dim value as String = CallByName(myObject, propertyName, CallType.Get)
于 2013-01-24T12:25:38.153 回答