Question

Dans le cadre de ma demande, j'ai une fonction qui reçoit un MethodInfo et ont besoin de faire des opérations spécifiques sur elle selon que cette méthode est « Méthode d'extension ».

J'ai vérifié la classe MethodInfo et je ne pouvais pas trouver IsExtension propriété ou drapeau qui montre que la méthode est l'extension.

Est-ce que quelqu'un sait comment puis-je trouver que de MethodInfo de la méthode?

Était-ce utile?

La solution

Basé sur

F # méthodes d'extension en C #

il semble qu'il y ait un attribut sur la forme compilée. Donc, si la méthode a cet attribut:

http://msdn.microsoft.com /en-us/library/system.runtime.compilerservices.extensionattribute.aspx

Autres conseils

Vous pouvez appeler le IsDefined méthode sur l'instance MethodInfo trouver ceci en vérifiant si le ExtensionAttribute est appliqué à la méthode:

bool isExtension=someMethod.IsDefined(typeof(ExtensionAttribute),true);

Cela semble très similaire à une question précédente , pourrait valoir une Regardez. La suggestion était de chercher des classes et des méthodes avec le ExtensionAttribute qui ressemble à ce que vous recherchez.

Si vous savez que vous obtenez un MethodInfo d'une instance, vous pouvez facilement vérifier si la méthode est statique. Les méthodes d'extension ne sont que du sucre syntaxique et se transforment en appels de méthodes statiques qui passent dans l'instance.

Ne le compilateur basculer toutes les méthodes d'extension en méthode statique appels à la compilation?

myList.First();

devient

Enumerable.First(myList);

Si tel est le cas, alors il n'y a pas de méthodes d'extension dans le runtime .NET (où vous reflétez).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top