我有一个看起来像这个MyClass.SpecialMethod()
的成员,我需要将此方法的名称作为字符串发送给另一个方法。我知道我可以使用TypeOf.GetMethods(..).Name
,但是..将被硬编码,如果SpecialMethod更改名称,将出现问题。
所以我想做的是这样的
TypeOf(MyClass).GetMethod(MyClass.SpecialMethod).Name
这是可能的,如果是这样,怎么办?
我知道我可以从方法内部获取当前方法的名称,但是到现在为止。
最佳答案
如果可以将nameof()
用作Jason suggested,请继续使用它。
如果您不这样做,请编写以下帮助程序方法:
class MyClass {
public void SpecialMethod() {
var myName = WhatIsMyName();
}
private static string WhatIsMyName([CallerMemberName] string name= "") {
return name;
}
}
有关详细信息,请参见MSDN。请注意,如果调用方方法被重载,您将获得其名称,但名称不明确。
较旧的C#版本不支持此功能(.NET 4.5中已引入)。如果您必须与他们打交道,那么您可能需要使用堆栈走动的旧技巧来检查成员名称,大致是这样的:
[MethodImpl(MethodImplOptions.NoInlining)]
private static string WhatIsMyName() {
return new StackTrace().GetFrame(1).GetMethod().Name;
}
(请注意
[MethodImpl(MethodImplOptions.NoInlining)]
以防止内联,否则,如果内联此调用,您将跳过(GetFrame(1)
而不是GetFrame(0)
)要使用其名称的方法。请注意,所有这些技术(堆栈遍历,调用者信息,表达式)实际上都需要显式调用另一个在编译时解析
nameof()
的方法。这可能是性能上的巨大差异(如果有问题的话)。
关于c# - 通过指出来获取方法的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30801042/