Question

J'ai un morceau de code dissassembled qui ne fonctionne pas très bien autour du code de réflexion. Je ne sais pas sur la façon de rendre valide car je ne sais pas comment travailler avec MethodHandles etc ... Je pense que ce devrait être une tâche assez simple pour un gourou de réflexion parce que (pour autant que je peux déduire) la seule chose qui doit arriver est 'obtenir une poignée de méthode à partir d'une interface? Ai-je raison?

Le paramètre suivant est erroné .. IProductRepositoryItem.Code devrait être un RuntimeMethodHandle

(MethodInfo) MethodBase.GetMethodFromHandle(IProductRepositoryItem.Code));

code complet:

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);
Était-ce utile?

La solution

Assuming your function has no parameters, you should change the entire offending line to this:

typeof(IProductRepositoryItem).GetMethod("Code");

If it does take parameters, use the appropriate overload of GetMethod.

EDIT: If you're trying to access a property, you should use the overload of Expression.Property that takes a PropertyInfo rather than a MethodInfo.

typeof(IProductRepositoryItem).GetProperty("Code");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top