从接口获取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);

从接口获取RuntimeMethodHandle

假设您的函数没有参数,您应该将整个违规行更改为:

typeof(IProductRepositoryItem).GetMethod("Code");

如果它接受参数,则对GetMethod使用适当的过载。

EDIT:如果你试图访问一个属性,你应该使用Expression.Property的过载,它需要一个PropertyInfo而不是一个MethodInfo

typeof(IProductRepositoryItem).GetProperty("Code");
相关文章:
  • 没有找到相关文章