我如何找到调用当前方法的方法?

在使用C#登录时,如何才能知道调用当前方法的方法的名称? 我知道所有关于System.Reflection.MethodBase.GetCurrentMethod() ,但我想在堆栈跟踪中的这一步之下进行一步。 我已经考虑解析堆栈跟踪,但我希望找到一个更清晰的方法,比如Assembly.GetCallingAssembly()但是对于方法。


尝试这个:

using System.Diagnostics;
// Get call stack
StackTrace stackTrace = new StackTrace();

// Get calling method name
Console.WriteLine(stackTrace.GetFrame(1).GetMethod().Name);

它来自使用反射[C#]的获取调用方法。


在C#5中,您可以使用调用者信息获取该信息:

//using System.Runtime.CompilerServices;
public void SendError(string Message, [CallerMemberName] string callerName = "") 
{ 
    Console.WriteLine(callerName + "called me."); 
} 

您还可以获取[CallerFilePath][CallerLineNumber]


您可以使用呼叫者信息和可选参数:

public static string WhoseThere([CallerMemberName] string memberName = "")
{
       return memberName;
}

该测试说明了这一点:

[Test]
public void Should_get_name_of_calling_method()
{
    var methodName = CachingHelpers.WhoseThere();
    Assert.That(methodName, Is.EqualTo("Should_get_name_of_calling_method"));
}

虽然StackTrace的工作速度非常快,并且在大多数情况下不会成为性能问题,但呼叫者信息仍然更快。 在1000次迭代的样本中,我将其计时速度提高了40倍。

链接地址: http://www.djcxy.com/p/18403.html

上一篇: How can I find the method that called the current method?

下一篇: Order of items in classes: Fields, Properties, Constructors, Methods