我有一个方法。我想检查一下情况 如果我的条件的结果是真的抛出新的例外。 我需要为消息异常命名方法。例如:
public void MyMethod(Notifier not)
{
if(not.HasValue())
throw new Exception("MyMethod_name : " + not.Value);
}
如何获取方法中的方法名称?
答案 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的实现,请参考此链接......