采用以下类和方法:
public class Foo
public Foo Create(string bar) {
return new Foo(bar);
}
所以获得“创造”显而易见:nameof(Foo.Create)
除了在运行时使用反射读取参数之外,有没有办法获得“bar”?
答案 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
...这将为您提供方法的名称。