Якщо у мене є клас, який називається MyProgram
, чи існує спосіб отримання " MyProgram " у вигляді рядка?
Якщо у мене є клас, який називається MyProgram
, чи існує спосіб отримання " MyProgram " у вигляді рядка?
Відповіді:
Спробуйте це:
this.GetType().Name
nameof
оператора.
Я хотів підкинути це на добру міру. Я думаю, що спосіб @micahtan опублікований є кращим.
typeof(MyProgram).Name
nameof(MyProgram)
.
Хоча відповідь Міхетана хороша, статичним методом це не вийде. Якщо ви хочете отримати ім'я поточного типу, це повинно працювати всюди:
string className = MethodBase.GetCurrentMethod().DeclaringType.Name;
Для довідки, якщо у вас є тип, який успадковується від іншого, ви також можете використовувати
this.GetType().BaseType.Name
Якщо вам це потрібно у похідних класах, ви можете помістити цей код у базовий клас:
protected string GetThisClassName() { return this.GetType().Name; }
Потім ви можете дійти до імені у похідному класі. Повертає похідне ім'я класу. Звичайно, при використанні нового ключового слова "nameof" не буде потреби, як це різноманітність.
Крім того, ви можете визначити це:
public static class Extension
{
public static string NameOf(this object o)
{
return o.GetType().Name;
}
}
А потім використовуйте так:
public class MyProgram
{
string thisClassName;
public MyProgram()
{
this.thisClassName = this.NameOf();
}
}
Використовуй це
Скажімо, Application Test.exe працює і функція foo () у form1 [в основному це клас form1 ], тоді вище код буде генерувати нижче відповіді.
string s1 = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
Це повернеться.
s1 = "TEST.form1"
для назви функції:
string s1 = System.Reflection.MethodBase.GetCurrentMethod().Name;
повернеться
s1 = foo
Зверніть увагу, якщо ви хочете використовувати це за винятком використання:
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace );
}
[Nullable(2)]
щоб ви отримували попередження, коли активізовано перевірку нуля.
this
можна опустити. Все, що вам потрібно, щоб отримати назву поточного класу, це:
GetType().Name