Si tengo una clase llamada MyProgram
, ¿hay alguna forma de recuperar " MyProgram " como una cadena?
Si tengo una clase llamada MyProgram
, ¿hay alguna forma de recuperar " MyProgram " como una cadena?
Respuestas:
Prueba esto:
this.GetType().Name
nameof
operador.
Quería vomitar esto por si acaso. Creo que se prefiere la forma en que @micahtan publicó.
typeof(MyProgram).Name
nameof(MyProgram)
.
Con C # 6.0, puede usar el nameof
operador:
nameof(MyProgram)
Aunque la respuesta de micahtan es buena, no funcionará en un método estático. Si desea recuperar el nombre del tipo actual, este debería funcionar en todas partes:
string className = MethodBase.GetCurrentMethod().DeclaringType.Name;
Como referencia, si tiene un tipo que hereda de otro, también puede usar
this.GetType().BaseType.Name
Si necesita esto en clases derivadas, puede poner ese código en la clase base:
protected string GetThisClassName() { return this.GetType().Name; }
Luego, puede alcanzar el nombre en la clase derivada. Devuelve el nombre de la clase derivada. Por supuesto, cuando se usa la nueva palabra clave "nameof", no habrá necesidad de que esta variedad actúe.
Además puedes definir esto:
public static class Extension
{
public static string NameOf(this object o)
{
return o.GetType().Name;
}
}
Y luego use así:
public class MyProgram
{
string thisClassName;
public MyProgram()
{
this.thisClassName = this.NameOf();
}
}
Utilizar este
Digamos que Application Test.exe se está ejecutando y la función es foo () en form1 [básicamente es class form1 ], luego el código anterior generará la respuesta siguiente.
string s1 = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
Esto volverá
s1 = "TEST.form1"
para el nombre de la función:
string s1 = System.Reflection.MethodBase.GetCurrentMethod().Name;
volverá
s1 = foo
Tenga en cuenta que si desea usar esto en excepción, use:
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace );
}
[Nullable(2)]
para que reciba una advertencia cuando la comprobación nula esté activa.
this
puede ser omitido. Todo lo que necesita para obtener el nombre de clase actual es:
GetType().Name