我如何找到调用当前方法的方法?
在使用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