インターフェイスからRuntimeMethodHandleを取得しますか?
-
27-10-2019 - |
質問
私はいくつかの反射コードの周りではうまく機能しなかった分解されたコードを持っています。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");
所属していません StackOverflow