如何创建未知类型属性的委托?

时间:2013-05-21 16:27:27

标签: vb.net

我正在使用反射来按名称访问对象的属性,以调用get方法。即使我为每个属性缓存PropertyInfo,这也是数千次迭代的相对较慢的操作。我正在尝试使用委托更快地提出一些东西,但是VB.Net不允许我在一个对象上调用CreateDelegate而不知道编译时属性的返回类型。我怎么能这样做?

  • 我通过他们的(字符串)名称访问属性
  • 在编译时,属性的返回类型未知
  • 我正在尝试创建一个委托来快速访问对象的数千个实例上的一个或多个属性

编辑:代码如下

testC是一个示例对象,它包含我按名称访问的属性。 del是我想用来在testC实例上调用属性的委托。

Public Class testC
        Public Property prop1 As String
        Public Property prop2 As Double
        Public Property prop3 As Integer
        Public Property prop4 As String
        Public Property prop5 As String
        Public Property prop6 As String
End Class

Public Delegate Function del() As Object

我第一次访问每个属性时,使用反射从其名称中获取属性,并尝试构建一个委托,以便将来在该对象的其他实例上快速访问它。

Dim pi As Reflection.PropertyInfo = obj.GetType().GetProperty(propName)
Dim myDelegate As Object = System.Delegate.CreateDelegate(GetType(del), pi.GetGetMethod())

调用CreateDelegate会抛出此异常:

  

System.ArgumentException:无法绑定到目标方法,因为它   签名或安全透明度与   代表类型。

0 个答案:

没有答案