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#关于Textbox滚动显示最后一行,不闪烁问题

    C#关于Textbox滚动显示最后一行,不闪烁问题

    这篇文章主要介绍了C#关于Textbox滚动显示最后一行,不闪烁问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • WPF应用启动慢的问题解决

    WPF应用启动慢的问题解决

    今天碰到一个奇怪的现象,在某些机器上,进行了系统还原后,WPF应用打开较慢,约有35s。本文先记录下该问题的解决方案,应用启动性能官方文档中有说明,还有搜到的其它方案没来得及测试,如NGEN update
    2021-05-05
  • WPF中窗体最大化问题的解决方法

    WPF中窗体最大化问题的解决方法

    这篇文章主要给大家介绍了关于WPF中窗体最大化问题的解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用wpf具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • C#中判断一个集合是否是另一个集合的子集的简单方法

    C#中判断一个集合是否是另一个集合的子集的简单方法

    本文介绍利用C#中内置的系统函数判断一个集合是否是一个集合的子集的方法,此方法代码量极少,分享给大家。
    2016-04-04
  • c#中 String和string的区别介绍

    c#中 String和string的区别介绍

    String和string的区别有哪些,想有很多朋友都不知道吧,在本文将为大家详细介绍下,感兴趣的朋友可以参考下,希望对大家有所帮助
    2013-10-10
  • C#实现控制摄像头的类

    C#实现控制摄像头的类

    这篇文章主要介绍了C#实现控制摄像头的类,涉及C#操作摄像头的初始化、抓图、录像等功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • C#实现将RTF文档高效转换为PDF格式的两种方法详解

    C#实现将RTF文档高效转换为PDF格式的两种方法详解

    在现代办公自动化和文档处理场景中,经常需要将不同格式的文档统一转换为 PDF 格式,本文将详细介绍如何使用 C# 实现从 RTF 到 PDF 的转换,并提供两种主流方案,希望对大家有所帮助
    2026-03-03
  • C# SESSION丢失问题的解决办法

    C# SESSION丢失问题的解决办法

    这篇文章主要为大家详细介绍了C# SESSION丢失问题的解决办法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • C#统计字符串的方法

    C#统计字符串的方法

    这篇文章主要为大家详细介绍了C#统计字符串的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • 使用C#压缩PNG、JPEG和TIFF图像的方法

    使用C#压缩PNG、JPEG和TIFF图像的方法

    图像压缩是一种常用的减小图像大小的方法,它可以让您分别最小化存储和传输图像所需的空间和时间,有各种压缩技术可用来压缩图像,而不会降低图像的质量,根据这一点,这篇文章为您提供了一些使用 C# 以编程方式压缩PNG、JPEG和TIFF图像的简单方法
    2024-12-12

最新评论