Jeśli mam klasę o nazwie MyProgram
, czy istnieje sposób na pobranie „ MyProgram ” jako ciągu?
Jeśli mam klasę o nazwie MyProgram
, czy istnieje sposób na pobranie „ MyProgram ” jako ciągu?
Odpowiedzi:
Spróbuj tego:
this.GetType().Name
nameof
operatora.
Chciałem rzucić to na dobrą miarę. Myślę, że preferowany jest sposób wysłania @micahtan .
typeof(MyProgram).Name
nameof(MyProgram)
.
W wersji C # 6.0 możesz użyć nameof
operatora:
nameof(MyProgram)
Chociaż odpowiedź micahtana jest dobra, nie zadziała w metodzie statycznej. Jeśli chcesz pobrać nazwę bieżącego typu, ten powinien działać wszędzie:
string className = MethodBase.GetCurrentMethod().DeclaringType.Name;
Dla odniesienia, jeśli masz typ, który dziedziczy po innym, możesz również użyć
this.GetType().BaseType.Name
Jeśli potrzebujesz tego w klasach pochodnych, możesz umieścić ten kod w klasie podstawowej:
protected string GetThisClassName() { return this.GetType().Name; }
Następnie możesz dotrzeć do nazwy w klasie pochodnej. Zwraca pochodną nazwę klasy. Oczywiście przy użyciu nowego słowa kluczowego „nameof” nie będzie takiej potrzeby, jak ta odmiana działa.
Poza tym możesz to zdefiniować:
public static class Extension
{
public static string NameOf(this object o)
{
return o.GetType().Name;
}
}
A następnie użyj takiego:
public class MyProgram
{
string thisClassName;
public MyProgram()
{
this.thisClassName = this.NameOf();
}
}
Użyj tego
Powiedzmy, że Application Test.exe jest uruchomiony, a funkcja to foo () w formularzu 1 [w zasadzie jest to klasa form1 ], wówczas powyższy kod wygeneruje poniżej odpowiedzi.
string s1 = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
To wróci.
s1 = "TEST.form1"
dla nazwy funkcji:
string s1 = System.Reflection.MethodBase.GetCurrentMethod().Name;
wróci
s1 = foo
Uwaga: jeśli chcesz użyć tego wyjątku, użyj:
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace );
}
[Nullable(2)]
więc pojawia się ostrzeżenie, gdy aktywne jest sprawdzenie zerowe.
this
można pominąć. Aby uzyskać aktualną nazwę klasy, wystarczy:
GetType().Name