C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.NET4中的使用
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中的使用相关推荐
- 用.net4中的DynamicObject实现简单AOP
在.net framework 4中有一个DynamicObject 类型,我们通过重写 TryInvokeMember 方法实现简单的AOP. 首先看类图: 看下面的代码: public class ...
- [转]使用 .NET Framework 2.0 在您的应用程序中支持证书
NET 安全 使用 .NET Framework 2.0 在您的应用程序中支持证书 Dominick Baier 本文讨论: Windows 证书存储区 .NET 中的证书类 验证.SSL.Web 服 ...
- 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 ...
- sqlite 0转换为bit_Cisco Talos在SQLite中发现了一个远程代码执行漏洞
思科Talos的研究人员在SQLite中发现了一个use-after-free() 的漏洞,攻击者可利用该漏洞在受影响设备上远程执行代码. 攻击者可以通过向受影响的SQLite安装发送恶意SQL命令来 ...
- Theano 中文文档 0.9 - 7.2.3 Theano中的导数
7.2.3 Theano中的导数 译者:Python 文档协作翻译小组,原文:Derivatives in Theano. 本文以 CC BY-NC-SA 4.0 协议发布,转载请保留作者署名和文章出 ...
- C语言编程>第二十六周 ⑥ 请补充fun函数,该函数的功能是:按 “0”到 “9”统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。注意:不能使用字符串库函数。
例题:请补充fun函数,该函数的功能是:按 "0"到 "9"统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中.注意:不能使用字符串库函数. ...
- 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 ...
- vue tree组件_基于 Vue2.0 和 HeyUI 组件库的中后端系统 HeyUI Admin
介绍 heyui-admin 是一个成熟的企业应用解决方案,基于 vue2.0 和 heyui 组件库的中后端系统. 功能 - Js - common / 通用 - ajax / 封装axios - ...
- 《Adobe Illustrator CS5中文版经典教程》—第0课0.8节 在Illustrator CS5中置入Photoshop图像...
本节书摘来自异步社区<Adobe Illustrator CS5中文版经典教程>一书中的第0课0.8节 在Illustrator CS5中置入Photoshop图像,作者[美]Adobe公 ...
最新文章
- 关于Oracle数据库19c中的关键字和保留字的说明
- pymysql Key error:255的解决办法
- gin获取Get + Post 混合
- oracle10g数据库热备份,Oracle10g数据库冷备份脚本文件
- Ajax设置自定义请求头的两种方法
- 电脑上怎么配置mysql数据库服务器_Mysql数据库服务器安装与配置详解教程
- 球球大作战体验服找不到团战服务器6,球球大作战常见问题汇总 新版本问题解决方法...
- 上河南星海科技_揭秘丨赣江新区网红打卡点,为你按下科技快进键!
- 教你如何在@ViewChild查询之前获取ViewContainerRef
- 用maven按环境打包SpringBoot的不同配置文件
- javascript总结48:正则表达式(RegExp)
- c# 程序调试出现“未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。”...
- 软件公司内部协作平台的选型(项目/BUG/需求管理及用户支持)
- L2-004. 这是二叉搜索树吗?
- 项目管理十大知识领域和五大过程
- 安卓逆向_2 --- Androidkiller,apktool、dex2jar、jd-gui、jadx反编译工具 的 安装、设置及使用教程...
- MD5加密 生成32位md5码
- android jpct ae教程,android OpenGL开发使用JPCT-AE引擎显示3D立方体
- c51语言如何按位异或,51单片机教程:单片机逻辑与或异或指令详解
- latex运行报错File `res.cls‘ not found.