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

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

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

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

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


person Chris Marisic    schedule 20.05.2016    source источник
comment
Просто из любопытства, зачем тебе это?   -  person Paulo Morgado    schedule 21.05.2016
comment
@PauloMorgado Я передаю json напрямую через свою систему с минимальным набором текста. Мне нравится, что в моих тестах я могу легко обозначить связь между свойством и его именем json.................................. $"{nameof(Person.Name)}:chris, foo:bar" (я в поле для комментариев, это не буквальное копирование и вставка, а общая идея). Сложнее выразить эту связь между парой json-свойство-имя и значение и связью с парой имени и типа аргумента метода. Я устал от бесконечных картографических слоев, когда все, что я хотел, это прямой ввод.   -  person Chris Marisic    schedule 23.05.2016
comment
@PauloMorgado Одним из очень полезных случаев может быть начальная загрузка контейнера IoC, например Ninject WithConstructorArgument, принимающая отраженное строковое литеральное имя параметра - любое изменение в сигнатура метода, и бум! загрузка ломается. Вместо этого было бы идеально использовать nameof(Class.Method.Parameter).   -  person StuartLC    schedule 02.11.2017


Ответы (1)


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

var parameterNames = typeof(Program)
                     .GetMethod(nameof(Program.Main)).GetParameters()
                     .Select(p => p.Name);
person Patrick Hofman    schedule 20.05.2016
comment
Это предложение неверно: nameof не работает для параметров метода. nameof работает для параметров, но только в рамках параметра. - person Ian Newson; 14.11.2016
comment
Да, верно. Немного обновил. Если у вас есть лучшее предложение, добро пожаловать @IanNewson - person Patrick Hofman; 14.11.2016