7
votes

Obtenir la collecte de méthodes avec le même nom

J'ai du code (pour aider avec le routage de l'URL) qui essaie de trouver une méthode d'action dans un contrôleur.

Mon contrôleur ressemble à: p>

//cont is a System.Type object representing the controller
MethodInfo actionMethod = cont.GetMethod(action);


0 commentaires

3 Réponses :


1
votes

Utilisez

cont.GetMethod(action, new [] {typeof(MyViewModel )})


0 commentaires

2
votes

Obtenez simplement la collection de méthodes avec getMethods () AMD filtrez-les à l'aide d'une expression Lambda: getMethods (). Où (p => P.Name == "XYZ") .Toliste ();


2 commentaires

J'ai spécifiquement mentionné que j'espérais pas doit faire cela, mais merci néanmoins :)


Nous avons eu ce sujet hier. Il s'avère que, si vous souhaitez effectuer une recherche uniquement par nom, il n'y a pas d'autre solution.



4
votes

Il n'y a rien de mal à rechercher à travers le résultat de getMethods code> vraiment, mais si vous le souhaitez vraiment, vous pouvez faire:

var myOverloads = typeof(MyClass).GetMember("OverloadedMethodName")
                                 .OfType<MethodInfo>();


6 commentaires

Essayer ça maintenant. Je suis préoccupé par l'efficacité depuis que ce code fonctionne pour chaque demande.


Si vous êtes si inquiet, pourquoi ne pas vous mémoter vous-même? Cela devrait être beaucoup plus efficace depuis que la réflexion doit créer un nouveau tableau à chaque fois (il ne peut pas mettre en cache le tableau lui-même car vous pourriez la muter et cela ne vous fait pas confiance à ne pas).


Il semble que le nombre de membres du type n'influence pas la vitesse de getMember (ou l'impact est négligeable par rapport à getMethods )!?!


Je n'avais pas compris cela loin, même si je pourrais bien finir par faire ça.


Au fait, cherchez-vous à exécuter la méthode? Si oui (et que vous êtes vraiment préoccupé par la performance, soutenu par le profilage), je vous suggère de vous mettre en question et avec délégué.createdélégate.


Non, je n'ai pas besoin de l'exécuter réellement (pas dans mon code de toute façon). Tout ce que je fais, c'est modifier les paramètres de la route si l'action est trouvée.