当前位置: 首页 > article >正文

C# 如何获取当前成员函数的函数名

C# 如何获取当前成员函数的函数名

在 C# 中获取当前成员函数的名称,有以下几种常用方法:


1. 使用 MethodBase.GetCurrentMethod()(反射)

using System.Reflection;public void MyMethod()
{string methodName = MethodBase.GetCurrentMethod().Name;Console.WriteLine(methodName); // 输出 "MyMethod"
}

特点

  • 适用于任何方法(静态/实例)。
  • 有轻微性能开销(反射调用)。
  • 可以获取完整的方法信息(如参数、返回类型等)。

2. 使用 nameof(C# 6.0+)

public void MyMethod()
{Console.WriteLine(nameof(MyMethod)); // 输出 "MyMethod"
}

特点

  • 编译时确定,无运行时开销。
  • 需要硬编码方法名(如果方法名更改,会自动同步)。

3. 使用 CallerMemberName(适用于属性/事件)

using System.Runtime.CompilerServices;public void MyMethod()
{LogMethodName();
}private void LogMethodName([CallerMemberName] string methodName = null)
{Console.WriteLine(methodName); // 输出 "MyMethod"
}

特点

  • 适用于属性 get/set、事件 add/remove 等场景。
  • 不能直接用于普通方法(需通过辅助方法)。

4. 使用 StackTrace(获取调用栈信息)

using System.Diagnostics;public void MyMethod()
{var stackTrace = new StackTrace();var methodName = stackTrace.GetFrame(0).GetMethod().Name;Console.WriteLine(methodName); // 输出 "MyMethod"
}

特点

  • 性能较差,适合调试或日志场景。
  • 可获取调用链上的所有方法名。

5. 表达式树(高级用法,动态获取)

using System.Linq.Expressions;public void MyMethod()
{Console.WriteLine(GetMethodName(() => MyMethod()));
}private string GetMethodName(Expression<Action> expression)
{return ((MethodCallExpression)expression.Body).Method.Name;
}

特点

  • 灵活但复杂,适合高阶场景。

最佳实践推荐

  • 普通方法:优先用 nameof(无性能开销)。
  • 需要动态获取时:用 MethodBase.GetCurrentMethod()
  • 属性/事件:用 CallerMemberName

示例代码

using System;
using System.Reflection;class Program
{static void Main(){var demo = new Demo();demo.ShowMethodName();}
}class Demo
{public void ShowMethodName(){// 方法1: nameofConsole.WriteLine("nameof: " + nameof(ShowMethodName));// 方法2: 反射Console.WriteLine("Reflection: " + MethodBase.GetCurrentMethod().Name);}
}

输出

nameof: ShowMethodName
Reflection: ShowMethodName

根据你的需求选择最合适的方式!

http://www.lryc.cn/news/2394670.html

相关文章:

  • 苍茫命令行:linux模拟实现,书写微型bash
  • 虚拟DOM和DOM是什么?有什么区别?虚拟DOM的优点是什么?
  • 累加法求数列通项公式
  • 鸿蒙NEXT应用加固工具哪家更好?国内主流的6款对比
  • 高效多线程图像处理实战
  • [特殊字符]《计算机组成原理》第 8 章 - CPU 的结构和功能
  • 第八篇:MySQL 备份恢复与数据安全管理实战
  • 系统是win11+两个ubuntu,ubuntu20.04和ubuntu22.04,想删除ubuntu20.04且不用保留数据
  • OramaCore 是您 AI 项目、答案引擎、副驾驶和搜索所需的 AI 运行时。它包括一个成熟的全文搜索引擎、矢量数据库、LLM界面和更多实用程序
  • GitHub 趋势日报 (2025年05月28日)
  • OpenCV CUDA模块图像处理------颜色空间处理之GPU 上交换图像的通道顺序函数swapChannels()
  • 回归任务损失函数对比曲线
  • Magentic-UI:人机协作的网页自动化革命
  • 计算机专业大学生常用的刷题,资源网站(持续更新)
  • Redisson学习专栏(二):核心功能深入学习(分布式锁,分布式集合,原子操作与计数器,事件与监听)
  • 医疗多模态共情推理与学习一体化网络构成初探
  • MySQL : MySQL的安装【CentOS 7】
  • EasyRTC嵌入式音视频实时通话SDK助力AI与IoT智能硬件打造音视频交互多场景应用
  • pod创建和控制
  • Unity数字人开发笔记——讯飞超拟人语音
  • C# 文件 I/O 操作详解:从基础到高级应用
  • OpenCV 第7课 图像处理之平滑(二)
  • Visual Studio笔记:MSVC工具集、MSBuild
  • 【Netty系列】核心概念
  • Axure中继器交互完全指南:核心函数解析×场景实战×避坑策略(懂得才能应用)
  • DeepSeek 赋能数字人直播带货:技术革新重塑电商营销新生态
  • 高端制造行业 VMware 替代案例合集:10+ 头部新能源、汽车、半导体制造商以国产虚拟化支持 MES、PLM 等核心应用系统
  • 【b站计算机拓荒者】【2025】微信小程序开发教程 - chapter3 项目实践 - 3人脸识别采集统计人脸检测语音识别
  • 达梦的TEMP_SPACE_LIMIT参数
  • 24核32G,千兆共享:裸金属服务器的技术原理与优势