Как получить имя заключающего типа в статическом контексте?

#c#

#c#

Вопрос:

Допустим, у вас есть:

 class Foo
{
   static string f = nameof(Foo);
}
 

Это работает, но мне не нравится иметь явное имя типа nameof . В контексте экземпляра я мог бы использовать this.GetType().Name , но как получить имя типа в статическом контексте (без явной ссылки на тип, как указано выше)?

Комментарии:

1.Но даже тогда GetType вы получаете тип среды выполнения, который, если используется наследование, не обязательно совпадает со статическим типом, в котором находится код. По крайней мере, теперь у нас есть nameof то, что могут понять инструменты рефакторинга. Раньше нам приходилось просто использовать строку…

2. Нет, вы не можете..

3. @Damien_The_Unbeliever, верно, но этого было бы достаточно для моих нужд (большую часть времени я использую закрытые типы).

Ответ №1:

Попробуйте это:

 class Foo
{
    static string f = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
}
 

Комментарии:

1. Это статическое поле объекта. Это не сам метод, поэтому вы не получите тип Foo здесь.

2. @Sefe: Ты пробовал? f в приведенном выше примере кода должно быть установлено значение «Foo».

3. @Sefe — инициализаторы оказываются внутри метода, просто не вашего собственного написания, если вы его не предоставляете. Класс будет иметь статический конструктор, и код инициализатора заканчивается там.