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

在 C# 开发中,有时需要在方法内部获取当前方法的名称,比如用于日志记录、调试输出或异常追踪。虽然不能直接通过变量获取,但 C# 提供了多种方式来实现这一需求。下面介绍几种常用且实用的方法。
通过 MethodBase.GetCurrentMethod() 可以获取当前执行的方法信息。这是最基础的方式,适用于大多数场景。
using System.Reflection;示例代码:
// 引入命名空间
void MyTestMethod()
{
string methodName = MethodBase.GetCurrentMethod().Name;
Console.WriteLine("当前方法名:" + methodName);
}
输出结果为:MyTestMethod。这种方式简单明了,但在性能敏感的场景中需谨慎使用,因为反射有一定开销。
C# 5.0 引入了调用方信息特性,可以在不依赖反射的情况下获取方法名,更高效且类型安全。
使用 [CallerMemberName] 特性,配合可选参数传递。
示例:
void LogMessage(string message, [CallerMemberName] string memberName = "")
{
Console.WriteLine($"来自方法 {memberName} 的消息:{message}");
}
void TestMethod()
{
LogMessage("发生了一个事件");
}
输出:来自方法 TestMethod 的消息:发生了一个事件。该方法无反射开销,编译时自动填充,适合日志、通知等通用功能封装。
如果需要更精确的调用堆栈信息(如行号、文件路径),可以使用 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,而传统反射方式作为备选方案。掌握这些技巧,能有效提升代码的可维护性和调试效率。
以上就是C# 怎么获取当前方法名称_C# 获取当前方法名技巧详解的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号