C#获取当前成员函数的函数名的几种常用方法

 更新时间:2026年02月25日 09:20:47   作者:Yashar Qian  
本文介绍了在C#中获取当前成员函数名称的几种方法,包括反射、nameof、CallerMemberName、StackTrace和表达式树,并给出了最佳实践推荐,需要的朋友可以参考下

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: nameof
        Console.WriteLine("nameof: " + nameof(ShowMethodName));

        // 方法2: 反射
        Console.WriteLine("Reflection: " + MethodBase.GetCurrentMethod().Name);
    }
}

输出

nameof: ShowMethodName
Reflection: ShowMethodName

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

到此这篇关于C#获取当前成员函数的函数名的几种常用方法的文章就介绍到这了,更多相关C#获取当前成员函数函数名内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C# 汉字转拼音(全拼和首字母)实例

    C# 汉字转拼音(全拼和首字母)实例

    这篇文章介绍了C# 汉字转拼音(全拼和首字母)实例代码,有需要的朋友可以参考一下
    2013-10-10
  • 基于C#实现获取本地磁盘目录

    基于C#实现获取本地磁盘目录

    这篇文章主要为大家详细介绍了如何利用C#实现获取本地磁盘目录的功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12
  • C#操作Excel相关方法总结

    C#操作Excel相关方法总结

    这篇文章主要介绍了C#操作Excel相关方法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • C# 中 WebSocket 与 SignalR实时通信的两种方案

    C# 中 WebSocket 与 SignalR实时通信的两种方案

    在现代 Web 应用中,实时通信变得越来越重要,无论是聊天应用、在线游戏、股票行情推送还是协作编辑工具,都需要服务器能够主动向客户端推送数据,本文将对这两种技术进行比较,分析它们的异同点和使用场景,并提供简单示例代码帮助你快速上手,感兴趣的朋友一起看看吧
    2025-05-05
  • C#实现判断字符串中是否包含中文的方法

    C#实现判断字符串中是否包含中文的方法

    这篇文章主要介绍了C#实现判断字符串中是否包含中文的方法,非常实用的功能,需要的朋友可以参考下
    2014-08-08
  • C# DI依赖注入的实现示例

    C# DI依赖注入的实现示例

    依赖注入是一种实现的方法,用于减少代码之间的耦合,本文主要介绍了C# DI依赖注入的实现示例,具有一定的参考价值,感兴趣可以了解一下
    2023-12-12
  • C# 特性AttributeUsage简介与使用教程

    C# 特性AttributeUsage简介与使用教程

    这篇文章主要介绍了C# 特性AttributeUsage简介与使用教程,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • 基于C#实现语音预处理

    基于C#实现语音预处理

    无论是在音视频录制系统,还是音视频通话系统或视频会议系统中,对从麦克风采集到的说话的声音数据进行预处理,都是是非常必要的,下面就跟随小编一起来学习一下如何使用C#实现语音预处理吧
    2025-06-06
  • C#中如何获取文件图标

    C#中如何获取文件图标

    这篇文章主要介绍了C#中如何获取文件图标的相关资料,需要的朋友可以参考下
    2016-03-03
  • c# 根据NPOI 读取一个excel 文件的多个Sheet

    c# 根据NPOI 读取一个excel 文件的多个Sheet

    这篇文章主要介绍了c# 根据NPOI 读取一个excel 文件的多个Sheet,帮助大家更好的利用c#处理excel表格,感兴趣的朋友可以了解下
    2020-12-12

最新评论