c# - MethodBase.GetCurrentMethod().Name 与 [CallerMemberName]

标签 c# .net reflection compiler-services

有什么区别以及对代码的影响?

关于性能和限制,什么更适合?

新属性:
- [调用文件路径属性]
- [CallerMemberName]
- [来电号码]

现在它们在 .NET 4 中也可用(它很容易开发并且看起来很神奇)。它们的值是在运行时编译还是解析的?

最佳答案

首先,MethodBase.GetCurrentMethod() 返回当前方法,而您可以使用[CallerMemberName] 等来传入当前方法中有关调用方法的一些信息。

前者是在运行时使用反射评估的,因此相对较慢,而后者是在编译时处理的,本质上是无操作性能明智的。我实际上已经在测试中验证了这一点。每次反射都会花费大约 20 微秒的时间,如果经常调用,这可能会非常重要,而 [Caller...] 属性不会产生可衡量的损失。

关于c# - MethodBase.GetCurrentMethod().Name 与 [CallerMemberName],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17626059/

相关文章:

c# - 如何在 C# 中正确关闭显示器电源?

.net - 如何配置 StyleCop 以抑制生成代码的警告?

c# - 以编程方式在 c# 文件中查找方法

c# - 从 IL 创建方法的副本

c# - 检查 List 是否包含等于给定实例的实例

c# - 使用 Newtonsoft.Json 反序列化 Json 数组

c# - 未捕获重新抛出异常

c# - 在带有参数的winforms webbrowser控件中从JS调用C#方法时出错

.Net 自定义跟踪文件名

c# - .NET 反射创建类属性