Se ho una classe chiamata MyProgram
, c'è un modo per recuperare " MyProgram " come stringa?
Se ho una classe chiamata MyProgram
, c'è un modo per recuperare " MyProgram " come stringa?
Risposte:
Prova questo:
this.GetType().Name
nameof
operatore.
Volevo vomitare per buona misura. Penso che sia preferito il modo in cui @micahtan ha pubblicato.
typeof(MyProgram).Name
nameof(MyProgram)
.
Con C # 6.0, è possibile utilizzare l' nameof
operatore:
nameof(MyProgram)
Sebbene la risposta di micahtan sia buona, non funzionerà con un metodo statico. Se vuoi recuperare il nome del tipo corrente, questo dovrebbe funzionare ovunque:
string className = MethodBase.GetCurrentMethod().DeclaringType.Name;
Per riferimento, se hai un tipo che eredita da un altro puoi anche usare
this.GetType().BaseType.Name
Se ne hai bisogno nelle classi derivate, puoi inserire quel codice nella classe base:
protected string GetThisClassName() { return this.GetType().Name; }
Quindi, è possibile raggiungere il nome nella classe derivata. Restituisce il nome della classe derivata. Naturalmente, quando si utilizza la nuova parola chiave "nameof", non sarà necessario che questa varietà agisca.
Inoltre puoi definire questo:
public static class Extension
{
public static string NameOf(this object o)
{
return o.GetType().Name;
}
}
E quindi utilizzare in questo modo:
public class MyProgram
{
string thisClassName;
public MyProgram()
{
this.thisClassName = this.NameOf();
}
}
Usa questo
Supponiamo che Application Test.exe sia in esecuzione e la funzione sia foo () in form1 [sostanzialmente è la classe form1 ], quindi il codice sopra genererà una risposta sotto.
string s1 = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
Questo tornerà.
s1 = "TEST.form1"
per nome funzione:
string s1 = System.Reflection.MethodBase.GetCurrentMethod().Name;
tornerà
s1 = foo
Nota se si desidera utilizzare questo in eccezione utilizzare:
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace );
}
[Nullable(2)]
modo da ricevere un avviso quando è attivo il controllo null.
this
può essere omesso. Tutto ciò che serve per ottenere il nome della classe corrente è:
GetType().Name