일부 리플렉션 코드에서 제대로 작동하지 않는 분해 된 코드 조각이 있습니다. 나는 MethodHandles 등으로 작업하는 법을 알지 못하기 때문에 그것을 어떻게 유효하게 할 수 있는지에 대해 모른다. (나는 가능한 한 공제 할 수 있기 때문에) 반사 전문가를위한 매우 간단한 작업이어야한다고 생각한다. 인터페이스에서 메소드 핸들을 얻는 것이 필요합니다. 나 맞아?인터페이스에서 RuntimeMethodHandle을 얻으시겠습니까?
다음 매개 변수가 잘못되었습니다 .. 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);
저는 C#에서'RuntimeMethodHandle'을 사용한 적이 없습니다. 컴파일러를 작성하는 경우에는 매우 일반적입니다. – leppie
다른 모든 질문에 [methodhandle]이 (가) Java 기능에 대한 것 같습니다. 이 질문에 더 적합한 C# 관련 태그가 있습니까? (나는 C#을 알지 못하기 때문에 그것을 바꿔 줄 사람은 누구나 가질 것입니다.) –