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

EDIT : プロパティにアクセスしようとしている場合は、 aではなく aExpression.Propertyを取るオーバーロードを使用する必要があります。PropertyInfoMethodInfo

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