答案:C#中获取当前方法名常用三种方式:1. 使用MethodBase.GetCurrentMethod().Name通过反射获取,适用于一般场景但性能开销较大;2. 推荐使用[CallerMemberName]特性,在编译时自动填充调用方法名,无反射开销,适合日志和通知封装;3. 通过StackTrace获取详细调用堆栈信息,包含行号和文件路径,性能较低仅建议用于调试。根据需求选择合适方法可提升代码维护性和调试效率。

在 C# 开发中,有时需要在方法内部获取当前方法的名称,比如用于日志记录、调试输出或异常追踪。虽然不能直接通过变量获取,但 C# 提供了多种方式来实现这一需求。下面介绍几种常用且实用的方法。
使用 System.Reflection 获取方法名
通过 MethodBase.GetCurrentMethod() 可以获取当前执行的方法信息。这是最基础的方式,适用于大多数场景。
using System.Reflection;示例代码:
// 引入命名空间
void MyTestMethod()
{
string methodName = MethodBase.GetCurrentMethod().Name;
Console.WriteLine("当前方法名:" + methodName);
}
输出结果为:MyTestMethod。这种方式简单明了,但在性能敏感的场景中需谨慎使用,因为反射有一定开销。
利用 Caller Information 特性(推荐)
C# 5.0 引入了调用方信息特性,可以在不依赖反射的情况下获取方法名,更高效且类型安全。
使用 [CallerMemberName] 特性,配合可选参数传递。
示例:
void LogMessage(string message, [CallerMemberName] string memberName = "")
{
Console.WriteLine($"来自方法 {memberName} 的消息:{message}");
}
void TestMethod()
{
LogMessage("发生了一个事件");
}
输出:来自方法 TestMethod 的消息:发生了一个事件。该方法无反射开销,编译时自动填充,适合日志、通知等通用功能封装。
结合 StackTrace 获取更详细信息
如果需要更精确的调用堆栈信息(如行号、文件路径),可以使用 StackTrace 类。
示例:
using System.Diagnostics;
void ShowCallerInfo()
{
var stackTrace = new StackTrace();
var frame = stackTrace.GetFrame(0); // 当前方法帧
var method = frame.GetMethod();
Console.WriteLine("当前方法:" + method.Name);
}
注意:这种方式性能较低,仅建议在调试或诊断场景中使用,避免在生产环境频繁调用。
基本上就这些。根据实际需求选择合适的方法:日常开发推荐 [CallerMemberName],调试分析可用 StackTrace,而传统反射方式作为备选方案。掌握这些技巧,能有效提升代码的可维护性和调试效率。








