C# 5.0 给我们带来了三个非常有用的编译器特性

CallerMemberName

CallerFilePath

CallerLineNumber

在C与C++中由下列字符帮助我们实现调试消息的文件行号

01.#define debug_msg printf("%s[%d]:",__FILE__,__LINE__);printf

在.NET 4中与其功能相等的是

new StackTrace(true).GetFrame(1).GetMethod().Name

(注意,是功能相等,但实现不同,.NET4中是运行时获取,而C#5.0 中应该是编译时指定,原因参考以下)

在C#5.0中我们可以用以下代码实现调试信息文件行号获取:

        public static void TraceMessage(string message,[CallerMemberName] string memberName = "",[CallerFilePath] string sourceFilePath = "",[CallerLineNumber] int sourceLineNumber = 0){Trace.WriteLine("message: " + message);Trace.WriteLine("member name: " + memberName);Trace.WriteLine("source file path: " + sourceFilePath);Trace.WriteLine("source line number: " + sourceLineNumber);}

用VS2012编译调试,便能看见文件,行号,调用者方法名称。

三个特性是.NET 4.5里面的,如果在.NET4中使用那么请定义一下特性:

namespace System.Runtime.CompilerServices
{[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]public class CallerMemberNameAttribute : Attribute { }[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]public class CallerFilePathAttribute : Attribute { }[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]public class CallerLineNumberAttribute : Attribute { }
}

为了编译时.NET4和.NET4.5兼容,可以用预处理指令增加编译条件,在4.5下编译以上代码。

关键点来了,在.NET4下定义以上属性后,用VS2010编译,无相关信息输出,

用VS2012重新编译,则会输出相关信息(注意实在.NET4下),说明这个特性是编译器特性。也就是说我们可以在VS2012里写.NET4项目时用以上特性。

转载于:https://www.cnblogs.com/binsys/archive/2013/04/11/3015776.html

C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.NET4中的使用相关推荐

  1. 用.net4中的DynamicObject实现简单AOP

    在.net framework 4中有一个DynamicObject 类型,我们通过重写 TryInvokeMember 方法实现简单的AOP. 首先看类图: 看下面的代码: public class ...

  2. [转]使用 .NET Framework 2.0 在您的应用程序中支持证书

    NET 安全 使用 .NET Framework 2.0 在您的应用程序中支持证书 Dominick Baier 本文讨论: Windows 证书存储区 .NET 中的证书类 验证.SSL.Web 服 ...

  3. 0.11内核rd_load@ramdisk.c中memcpy函数好像有bug

    0.11内核rd_load@ramdisk.c中memcpy函数好像有bug,如: #define memcpy(dst,src,n) \     __asm__("cld;rep;movs ...

  4. sqlite 0转换为bit_Cisco Talos在SQLite中发现了一个远程代码执行漏洞

    思科Talos的研究人员在SQLite中发现了一个use-after-free() 的漏洞,攻击者可利用该漏洞在受影响设备上远程执行代码. 攻击者可以通过向受影响的SQLite安装发送恶意SQL命令来 ...

  5. Theano 中文文档 0.9 - 7.2.3 Theano中的导数

    7.2.3 Theano中的导数 译者:Python 文档协作翻译小组,原文:Derivatives in Theano. 本文以 CC BY-NC-SA 4.0 协议发布,转载请保留作者署名和文章出 ...

  6. C语言编程>第二十六周 ⑥ 请补充fun函数,该函数的功能是:按 “0”到 “9”统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。注意:不能使用字符串库函数。

    例题:请补充fun函数,该函数的功能是:按 "0"到 "9"统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中.注意:不能使用字符串库函数. ...

  7. matlab pi表示,在matlab绘图中,x=0:0.1:4*pi;此语句中,0,0.1,4*... MATLAB中,x=0:pi/100:2*pi;表示什么意思?...

    导航:网站首页 > 在matlab绘图中,x=0:0.1:4*pi;此语句中,0,0.1,4*... MATLAB中,x=0:pi/100:2*pi;表示什么意思? 在matlab绘图中,x=0 ...

  8. vue tree组件_基于 Vue2.0 和 HeyUI 组件库的中后端系统 HeyUI Admin

    介绍 heyui-admin 是一个成熟的企业应用解决方案,基于 vue2.0 和 heyui 组件库的中后端系统. 功能 - Js - common / 通用 - ajax / 封装axios - ...

  9. 《Adobe Illustrator CS5中文版经典教程》—第0课0.8节 在Illustrator CS5中置入Photoshop图像...

    本节书摘来自异步社区<Adobe Illustrator CS5中文版经典教程>一书中的第0课0.8节 在Illustrator CS5中置入Photoshop图像,作者[美]Adobe公 ...

最新文章

  1. 关于Oracle数据库19c中的关键字和保留字的说明
  2. pymysql Key error:255的解决办法
  3. gin获取Get + Post 混合
  4. oracle10g数据库热备份,Oracle10g数据库冷备份脚本文件
  5. Ajax设置自定义请求头的两种方法
  6. 电脑上怎么配置mysql数据库服务器_Mysql数据库服务器安装与配置详解教程
  7. 球球大作战体验服找不到团战服务器6,球球大作战常见问题汇总 新版本问题解决方法...
  8. 上河南星海科技_揭秘丨赣江新区网红打卡点,为你按下科技快进键!
  9. 教你如何在@ViewChild查询之前获取ViewContainerRef
  10. 用maven按环境打包SpringBoot的不同配置文件
  11. javascript总结48:正则表达式(RegExp)
  12. c# 程序调试出现“未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。”...
  13. 软件公司内部协作平台的选型(项目/BUG/需求管理及用户支持)
  14. L2-004. 这是二叉搜索树吗?
  15. 项目管理十大知识领域和五大过程
  16. 安卓逆向_2 --- Androidkiller,apktool、dex2jar、jd-gui、jadx反编译工具 的 安装、设置及使用教程...
  17. MD5加密 生成32位md5码
  18. android jpct ae教程,android OpenGL开发使用JPCT-AE引擎显示3D立方体
  19. c51语言如何按位异或,51单片机教程:单片机逻辑与或异或指令详解
  20. latex运行报错File `res.cls‘ not found.

热门文章

  1. Express Session 的基本使用
  2. 从RAID看垂直伸缩到水平伸缩的演化
  3. LeetCode 1065. 字符串的索引对
  4. LeetCode 1090. 受标签影响的最大值(优先队列)
  5. LeetCode 874. 模拟行走机器人(set)
  6. LeetCode 304. 二维区域和检索 - 矩阵不可变(DP)
  7. mysql写什么不同_mysql - 编译配置PHP时,两种配置写法有什么不同
  8. 数据库实例:mysql与mongo结合用户登录
  9. 邻接矩阵的深度优先遍历
  10. 谁说2021届秋招算法岗一定要灰飞烟灭啦?