Si j'ai une classe appelée MyProgram
, existe-t-il un moyen de récupérer " MyProgram " sous forme de chaîne?
Si j'ai une classe appelée MyProgram
, existe-t-il un moyen de récupérer " MyProgram " sous forme de chaîne?
Réponses:
Essaye ça:
this.GetType().Name
nameof
opérateur.
Je voulais jeter cela pour faire bonne mesure. Je pense que la façon dont @micahtan a été publiée est préférée.
typeof(MyProgram).Name
nameof(MyProgram)
.
Avec C # 6.0, vous pouvez utiliser l' nameof
opérateur:
nameof(MyProgram)
Bien que la réponse de micahtan soit bonne, elle ne fonctionnera pas dans une méthode statique. Si vous souhaitez récupérer le nom du type actuel, celui-ci devrait fonctionner partout:
string className = MethodBase.GetCurrentMethod().DeclaringType.Name;
Pour référence, si vous avez un type qui hérite d'un autre, vous pouvez également utiliser
this.GetType().BaseType.Name
Si vous en avez besoin dans les classes dérivées, vous pouvez mettre ce code dans la classe de base:
protected string GetThisClassName() { return this.GetType().Name; }
Ensuite, vous pouvez atteindre le nom dans la classe dérivée. Renvoie le nom de classe dérivé. Bien sûr, lors de l'utilisation du nouveau mot-clé "nameof", il n'y aura aucun besoin comme cette variété agit.
De plus, vous pouvez définir ceci:
public static class Extension
{
public static string NameOf(this object o)
{
return o.GetType().Name;
}
}
Et puis utilisez comme ceci:
public class MyProgram
{
string thisClassName;
public MyProgram()
{
this.thisClassName = this.NameOf();
}
}
Utilisez ceci
Supposons que Application Test.exe est en cours d'exécution et que la fonction est foo () dans form1 [fondamentalement, c'est la classe form1 ], le code ci-dessus générera une réponse ci-dessous.
string s1 = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
Cela reviendra.
s1 = "TEST.form1"
pour le nom de la fonction:
string s1 = System.Reflection.MethodBase.GetCurrentMethod().Name;
reviendra
s1 = foo
Notez si vous souhaitez utiliser ceci en utilisation d'exception:
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace );
}
[Nullable(2)]
afin que vous obteniez un avertissement lorsque la vérification nulle est active.
this
peut être omis. Tout ce dont vous avez besoin pour obtenir le nom de la classe actuelle est:
GetType().Name