Есть ли способ для имени оператора получить доступ к параметрам метода (за пределами того же метода)?

Возьмем следующий класс и метод:

public class Foo
    public Foo Create(string bar) {
        return new Foo(bar);
    }

Таким образом, получение "Create" очевидно: nameof(Foo.Create)

Есть ли способ получить "бар", кроме использования отражения, чтобы прочитать параметры во время выполнения?

Ответ 1

Нет. Невозможно получить имена параметров извне метода, используя nameof. nameof не работает для параметров метода, если вы хотите, чтобы имя на вызывающей стороне (для вызываемого явно работает). Другие методы, о которых вы говорили, как отражение, действительно работают.

var parameterNames = typeof(Program)
                     .GetMethod(nameof(Program.Main)).GetParameters()
                     .Select(p => p.Name);

Ответ 2

Я знаю, что это поздний ответ, но я нашел довольно простое и достаточно элегантное решение проблемы, которое не требует размышлений.

Изменить класс Foo как это...

public class Foo
  public static string CreateName = nameof(Create);
  public Foo Create(string bar) {
    return new Foo(bar);
  }
}

... тогда в других классах вы можете сделать...

Foo.CreateName

... который даст вам название метода.