У меня есть класс со статическим List<T>
и некоторые нестатические поля. Теперь я хотел бы, чтобы инициализировать этот список с некоторыми объектами, как так:Использование nameof нестатического поля в инициализаторе статического поля
class C
{
private Bar bar;
private static List<Foo> list = new List<Foo>()
{
new Foo(nameof(bar)), // OK
new Foo(nameof(bar) + nameof(bar.Baz)) // Error CS0236
};
}
При создании первого Foo
объекта прекрасно работает, я получаю ошибку
Поля инициализатор не может ссылаться на НЕРАСПРОСТРАНЕНИИ статическое поле, метод или имущество C.bar
на втором.
Я знаю, что статические члены не могут получить доступ к данным экземпляра (см. this question). Но, насколько я понимаю, nameof
оценивается во время компиляции и получает доступ только к метаданным, а не к данным экземпляра. Так почему же это не работает и есть ли способ?