从接口获取RuntimeMethodHandle
本文关键字:RuntimeMethodHandle 获取 接口 | 更新日期: 2023-09-27 18:16:33
我有一段反汇编代码,它在一些反射代码周围工作得不太好。我不知道如何使其有效,因为我不知道如何使用MethodHandles等…我认为对于反射大师来说这应该是一个相当简单的任务,因为(据我所知)唯一需要发生的事情是"从接口获取方法句柄"?我说的对吗?
以下参数错误…IProductRepositoryItem。代码应该是RuntimeMethodHandle
(MethodInfo) MethodBase.GetMethodFromHandle(IProductRepositoryItem.Code));
完整代码:
ParameterExpression parameterExpression = Expression.Parameter(typeof (T), "i");
// ISSUE: method reference
Expression<Func<T, object>> property =
Expression.Lambda<Func<T, object>>(
(Expression) Expression.Property(
(Expression) Expression.Convert((Expression) parameterExpression, typeof (IProductRepositoryItem)),
(MethodInfo) MethodBase.GetMethodFromHandle(IProductRepositoryItem.Code)),
new ParameterExpression[1] {
parameterExpression
});
string key = entityHelper.GetField<T>(property);
假设您的函数没有参数,您应该将整个违规行更改为:
typeof(IProductRepositoryItem).GetMethod("Code");
如果它接受参数,则对GetMethod
使用适当的过载。
EDIT:如果你试图访问一个属性,你应该使用Expression.Property
的过载,它需要一个PropertyInfo
而不是一个MethodInfo
。
typeof(IProductRepositoryItem).GetProperty("Code");