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公 ...
最新文章
- 调驱动 一定注意 cache 表的
- 基于FPGA的OLED屏幕开发
- C++ Primer 5th笔记(chap 19 特殊工具与技术)type_info 类
- VTK:Rendering之Cone3
- Scala中zip或者zipWithIndex的计数器用法
- 语言把数据写入csv文件_把JSON/CSV文件打造成MySQL数据库
- 关于csgo的观看录像fps低_CSGO:Ququ带队击败LQ豪取五连冠,8次MVP闪耀全场
- STM32-OLED显示
- sleep() wait() yield() join()
- Android 学习笔记--android基本
- 输入n个字符串字典序排序_30个Python奇淫技巧集
- mRNA的亚细胞定位
- rose服务器系统,Rose HA for windows
- paraview使用GUI连接服务器
- VS Code 的粘性滚动预览 - 类似于 Excel 的冻结首行
- 百练2706 麦森数
- 【渝粤题库】陕西师范大学200611 英语修辞 作业
- C++一本通题库1008
- 计算机系统基础作业数据的机器级表示与处理
- 腾讯云搭建Socks5一系列及相关内容