2

我有一段反汇编代码,它在一些反射代码方面效果不佳。我不知道如何使它有效,因为我不知道如何使用 MethodHandles 等......我认为这对于反射大师来说应该是一项非常简单的任务,因为(据我所知)唯一的事情需要发生的是“从接口获取方法句柄”?我对么?

以下参数错误.. IProductRepositoryItem.Code 应该是 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);
4

1 回答 1

2

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

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

如果它确实需要参数,请使用适当的重载GetMethod.

编辑:如果你试图访问一个属性,你应该使用Expression.Property需要 aPropertyInfo而不是 a的重载MethodInfo

typeof(IProductRepositoryItem).GetProperty("Code");
于 2011-12-02T13:18:30.930 回答