有没有办法让nameof运算符访问方法参数(在同一方法之外)?

时间:2016-05-20 15:02:56

标签: c# metadata c#-6.0 nameof

采用以下类和方法:

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

所以获得“创造”显而易见:nameof(Foo.Create)

除了在运行时使用反射读取参数之外,有没有办法获得“bar”?

2 个答案:

答案 0 :(得分:19)

没有。无法使用nameof从方法外部获取参数名称。如果你想在调用端使用名称,那么nameof对方法参数不起作用(对于被调用者,它显然可以正常工作)。你提到的其他方法,比如反射,确实有效。

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

答案 1 :(得分:0)

我知道这是一个较晚的答复,但是我发现了一个不需要反射的相当简单且相当优雅的解决方案。

像这样修改类Foo ...

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

...然后在其他课程中可以做...

Foo.CreateName

...这将为您提供方法的名称。