我正在使用反射来按名称访问对象的属性,以调用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:无法绑定到目标方法,因为它 签名或安全透明度与 代表类型。