質問

私はいくつかの反射コードの周りではうまく機能しなかった分解されたコードを持っています。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.

編集:プロパティにアクセスしようとしている場合は、次のオーバーロードを使用する必要があります Expression.Property それは取る PropertyInfo ではなく、 MethodInfo.

typeof(IProductRepositoryItem).GetProperty("Code");
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top