我有一段反彙編的代碼,它在某些反射代碼中效果不佳。我不知道如何使它有效,因為我不知道如何使用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);
假設您的函數沒有參數,您應該將整個違規行更改為:
typeof(IProductRepositoryItem).GetMethod("Code");
如果它確實需要參數,請使用適當的GetMethod
重載。
編輯 :如果您正在嘗試訪問屬性,則應使用帶有PropertyInfo
而不是MethodInfo
的Expression.Property
的重載。
typeof(IProductRepositoryItem).GetProperty("Code");