J'ai un morceau de code démonté qui ne marchait pas très bien autour d'un code de réflexion. Je n'ai aucune idée sur la façon de le 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 la réflexion parce que (autant que je peux déduire) la seule chose ce qui doit arriver est 'obtenir un handle de méthode à partir d'une interface'? Ai-je raison?Obtenir RuntimeMethodHandle à partir de l'interface?
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);
Je n'ai jamais utilisé 'RuntimeMethodHandle' en C#. C'est assez commun si vous écrivez un compilateur. – leppie
Toutes les autres questions marquées [methodhandle] semblent concerner la fonction Java. Y a-t-il un tag lié au C# qui serait plus approprié pour cette question? (Je ne sais pas C#, donc je vous laisse (à tout le monde) le changer, si nécessaire.) –