2015-12-08 29 views
9

Voglio che venga chiamato il nome dell'attuale gestore.Ottieni il nome del metodo corrente

MethodInfo.GetCurrentMethod().Name o MethodBase.GetCurrentMethod().Name funzionano correttamente in modalità di debug.

Ma una volta che offusisco (usando confuserEx) il mio progetto le 2 funzioni restituiscono "System.Reflection.MethodBase()".

ho notato ho potuto ottenere il nome della mia funzione utilizzando la seguente riga: ((RoutedEventHandler)this.MyMethodName).GetMethodInfo().Name

Esso restituisce "MyMethodName" che è il risultato atteso.

Ma non è affatto generico. Mi piacerebbe un pezzo di codice funzionante quando non conosco il nome del metodo corrente.

+1

Possibile duplicato del [C# come ottenere il nome del metodo corrente dal codice] (http://stackoverflow.com/questions/2652460/c-sharp-how-to-get-the-name-of-the-current-method-from-code) –

+0

Se non è d'aiuto, le soluzioni che prevedono un preprocessore per il codice sorgente sono accettabili? –

+2

@Thomas, Yahya: Non è convinto che si tratti di un duplicato, poiché nessuna delle domande collegate si riferisce specificamente alle difficoltà introdotte per rendere questo efficace contro l'offuscamento del codice. –

risposta

9

Come dichiarato here:

valori Info chiamante vengono emessi come valori letterali nel linguaggio intermedio (IL) al momento della compilazione. A differenza dei risultati della proprietà StackTrace per le eccezioni, i risultati non sono influenzati dall'offuscamento.

Quindi dal tuo metodo si potrebbe provare a chiamare il seguente metodo come:

public string GetCaller([System.Runtime.CompilerServices.CallerMemberName] string memberName = "") 
{ 
    return memberName; 
} 
+1

Sì, sta funzionando, stavo provando questa soluzione grazie a @O. R. Mapper, grazie a entrambi per questa soluzione :) – user2088807

Problemi correlati