Se eu tiver uma classe chamada MyProgram
, existe uma maneira de recuperar " MyProgram " como uma string?
Se eu tiver uma classe chamada MyProgram
, existe uma maneira de recuperar " MyProgram " como uma string?
Respostas:
Tente o seguinte:
this.GetType().Name
nameof
operador.
Eu queria vomitar isso por uma boa medida. Eu acho que a maneira como @micahtan postou é preferida.
typeof(MyProgram).Name
nameof(MyProgram)
.
Com o C # 6.0, você pode usar o nameof
operador:
nameof(MyProgram)
Embora a resposta do micahtan seja boa, ela não funcionará em um método estático. Se você deseja recuperar o nome do tipo atual, este deve funcionar em qualquer lugar:
string className = MethodBase.GetCurrentMethod().DeclaringType.Name;
Para referência, se você tem um tipo que herda de outro, também pode usar
this.GetType().BaseType.Name
Se você precisar disso em classes derivadas, poderá colocar esse código na classe base:
protected string GetThisClassName() { return this.GetType().Name; }
Em seguida, você pode alcançar o nome na classe derivada. Retorna o nome da classe derivada. Obviamente, ao usar a nova palavra-chave "nameof", não será necessário que essa variedade atue.
Além disso, você pode definir isso:
public static class Extension
{
public static string NameOf(this object o)
{
return o.GetType().Name;
}
}
E então use assim:
public class MyProgram
{
string thisClassName;
public MyProgram()
{
this.thisClassName = this.NameOf();
}
}
Usa isto
Digamos que o Application Test.exe esteja em execução e a função foo () no form1 [basicamente seja a classe form1 ], o código acima gerará uma resposta abaixo.
string s1 = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
Isso retornará.
s1 = "TEST.form1"
para o nome da função:
string s1 = System.Reflection.MethodBase.GetCurrentMethod().Name;
retornará
s1 = foo
Observe se você deseja usar isso em exceção, use:
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace );
}
[Nullable(2)]
para que você receba um aviso quando a verificação nula estiver ativa.
this
pode ser omitida. Tudo o que você precisa para obter o nome da classe atual é:
GetType().Name