0

0

C# 怎么获取当前方法名称_C# 获取当前方法名技巧详解

星降

星降

发布时间:2025-11-27 16:21:06

|

494人浏览过

|

来源于php中文网

原创

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

c# 怎么获取当前方法名称_c# 获取当前方法名技巧详解

在 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] 特性,配合可选参数传递。

示例:

喵记多
喵记多

喵记多 - 自带助理的 AI 笔记

下载

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,而传统反射方式作为备选方案。掌握这些技巧,能有效提升代码的可维护性和调试效率。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

315

2023.08.02

javascriptvoid(o)怎么解决
javascriptvoid(o)怎么解决

javascriptvoid(o)的解决办法:1、检查语法错误;2、确保正确的执行环境;3、检查其他代码的冲突;4、使用事件委托;5、使用其他绑定方式;6、检查外部资源等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

175

2023.11.23

java中void的含义
java中void的含义

本专题整合了Java中void的相关内容,阅读专题下面的文章了解更多详细内容。

97

2025.11.27

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

389

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

571

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

389

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

571

2023.08.10

console接口是干嘛的
console接口是干嘛的

console接口是一种用于在计算机命令行或浏览器开发工具中输出信息的工具,提供了一种简单的方式来记录和查看应用程序的输出结果和调试信息。本专题为大家提供console接口相关的各种文章、以及下载和课程。

412

2023.08.08

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

8

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号