如何获取方法中的方法名称

时间:2012-03-11 04:46:39

标签: c#

我有一个方法。我想检查一下情况 如果我的条件的结果是真的抛出新的例外。 我需要为消息异常命名方法。例如:

public void MyMethod(Notifier not)
{ 
    if(not.HasValue())
        throw new Exception("MyMethod_name : " + not.Value);
} 

如何获取方法中的方法名称?

4 个答案:

答案 0 :(得分:2)

这是你要找的吗?

new StackFrame(1, true).GetMethod().Name

但是再次使用堆栈意味着如果误用将会影响性能。

您正在寻找这个 - http://www.csharp-examples.net/get-method-names/

http://heifner.blogspot.co.nz/2006/12/logging-method-name-in-c.html

在这里看一下很好的笔记 - Get Calling function name from Called function

希望这有帮助,欢呼!

答案 1 :(得分:1)

这种方法避免了堆栈问题:

public void MyMethod(Notifier not)
{ 
    if(not.HasValue())
    {
        string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
        throw new Exception(methodName + ": " + not.Value);
    }
} 

[但请注意,偶尔可能会出现意外结果:例如,在发布版本中经常会内联小方法或属性,在这种情况下,结果将是调用者的方法名称。]

答案 2 :(得分:0)

public void MyMethod(Notifier not)
{ 
  StackFrame stackFrame = new StackFrame();
  MethodBase methodBase = stackFrame.GetMethod();

  if(not.HasValue())
      throw new Exception("MyMethod_name : " + methodBase.Name);
}   

答案 3 :(得分:0)

使用Reflection您可以获取方法名称.....通过使用框架中强大的反射工具,您可以调用该方法。这涉及System.Reflection命名空间和GetMethod方法。

对于Reflection的实现,请参考此链接......

http://www.dotnetperls.com/getmethod