Khh*_*Khh 1 c# delegates dynamic invoke .net-3.5
我已经读过我应该创建并重用委托来获取对象属性的值.
我使用此代码来创建Delegate
var objParm = Expression.Parameter(property.DeclaringType, "o");
Type delegateType = typeof(Func<,>).MakeGenericType(property.DeclaringType, property.PropertyType);
var lambda = Expression.Lambda(delegateType, Expression.Property(objParm, property.Name), objParm);
return lambda.Compile()
Run Code Online (Sandbox Code Playgroud)
现在我只找到在"DynamicInvoke"调用中使用委托的方法.
现在我想将调用更改为"调用"导致性能原因.
我试过了
Delegate.Method.Invoke(invokedObject, null);
Run Code Online (Sandbox Code Playgroud)
但是在通话结束后我得到了例外
MethodInfo must be a RuntimeMethodInfo.
Run Code Online (Sandbox Code Playgroud)
我有每个属性的缓存类,我可以存储动态创建的委托.
我应该怎么做才能使用"普通"调用?
非常感谢.
您将不得不发出一个Func<object,object>委托,并在lambda内部和必要时进行转换,并检索结果.如果在编译时不知道委托的类型,则不能直接调用它,因为您不知道它采用何种类型的参数,也不知道返回类型是什么.
另外,请注意您可以创建一个委托property.GetGetMethod()- 没有理由在这里编译自己的方法.只需使用属性getter方法.