Если у меня есть класс с именем MyProgram
, есть ли способ получить « MyProgram » в виде строки?
Если у меня есть класс с именем MyProgram
, есть ли способ получить « MyProgram » в виде строки?
Ответы:
Попробуй это:
this.GetType().Name
nameof
оператор.
Я хотел бросить это для хорошей меры. Я думаю, что способ размещения @micahtan является предпочтительным.
typeof(MyProgram).Name
nameof(MyProgram)
.
С C # 6.0 вы можете использовать nameof
оператор:
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