.NET:从数组中对象的动态属性中检索值

本文关键字:动态 属性 检索 对象 数组 NET | 更新日期: 2023-09-27 17:55:50

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

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

.NET:从数组中对象的动态属性中检索值

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

实际上,如果您别无选择,可以直接使用myObject.Property()。最好将对象转换为正确的类型,以便使用该属性。

这是您的另一个选择:

Dim value as String = CallByName(myObject, propertyName, CallType.Get)