Domanda

Come parte della mia applicazione ho una funzione che riceve un MethodInfo e devo eseguire operazioni specifiche su di esso a seconda che il metodo sia "Metodo di estensione".

Ho controllato la classe MethodInfo e non sono riuscito a trovarne alcuna IsExtension proprietà o flag che mostra che il metodo è un'estensione.

Qualcuno sa come posso trovarlo dal MethodInfo del metodo?

È stato utile?

Soluzione

In base a

F metodi # di estensione in C #

sembra che ci sia un attributo sul modulo compilato. Quindi, vedere se il metodo ha questo attributo:

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

Altri suggerimenti

È possibile chiamare il TestDefinito metodo nell'istanza MethodInfo per trovare questo fuori dal controllo per vedere se la ExtensionAttribute viene applicato al metodo:

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

Questo è molto simile a un precedente domanda , potrebbe essere la pena di Guarda. Il suggerimento non è stato a guardare per le classi e metodi con lo che ExtensionAttribute suona come quello che si sta dopo.

Se si sa che si stanno ottenendo un MethodInfo da un'istanza, si può facilmente verificare se il metodo è statico. metodi di estensione sono solo zucchero sintattico e ottenere trasformato in chiamate di metodo statico che passano nell'istanza.

Il compilatore non trasforma tutti i metodi di estensione in chiamate di metodi statici in fase di compilazione?

myList.First();

diventa

Enumerable.First(myList);

Se questo è il caso, non ci sono metodi di estensione nel runtime .net (su cui stai riflettendo).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top