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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧城市建设:科技创业的下一个浪潮

来源:资本实验室随着全球城市化进程的加速,越来越多的人涌进城市,这为城市建设带来了一系列的挑战:一方面,城市需要面对大量的越来越老化的基础设施;另一方面,需要为新涌入的城市居民提供新的&a…

Android之ViewDragHelper

在自定义ViewGroup中,很多效果都包含用户手指去拖动其内部的某个View(eg:侧滑菜单等),针对具体的需要去写好onInterceptTouchEvent和onTouchEvent这两个方法是一件很不容易的事,需要自己去处理:多手指的处理、加速度检测等等。 好…

DARPA人工智能技术研究情况一览

来源:一体化指挥调度国家工程实验室、高端装备发展研究中心摘要:20世纪60年代初,DARPA(当时为ARPA)开始介入自主技术研究,并很快成为该领域的主要研究机构。DARPA意识到,人工智能可以满足大量的…

ListView滑动删除效果实现

通过继承ListView然后结合PopupWindow实现 首先是布局文件&#xff1a; delete_btn.xml&#xff1a;这里只需要一个Button <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/a…

直接读取硬盘扇区

Linux系统下一切都是文件&#xff0c;可以像使用普通文件一样使用设备&#xff0c;可直接操作设备扇区内容,这种方式不经过文件系统。 #include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#in…

深入“肠-脑”神经高速通道,揭开“第六感觉”面纱

来源&#xff1a;中国生物技术网直觉是什么&#xff1f;通常被描述为超感官的第六感觉&#xff0c;它在英文里直译就是肠道感觉。肠道作为“第二大脑”的事实已经家喻户晓了。如果你曾在重要的演讲前感到心慌恶心&#xff0c;或者在一顿大餐后感到头昏眼花&#xff0c;那就是肠…

移动传感器扫描覆盖

移动传感器扫描覆盖摘要&#xff1a;关于传感器网络中的地址覆盖问题&#xff0c;已经做过很多尝试。他们通常归为两类&#xff0c;全覆盖和栅栏覆盖&#xff0c;统称为静态覆盖。在这篇论文中&#xff0c;我们研究一种新的覆盖方案&#xff0c;扫描覆盖&#xff0c;一种不同于…

Andoird自定义ViewGroup实现竖向引导界面

一般进入APP都有欢迎界面&#xff0c;基本都是水平滚动的&#xff0c;今天和大家分享一个垂直滚动的例子。 先来看看效果把&#xff1a; 首先是布局文件&#xff1a; <com.example.verticallinearlayout.VerticalLinearLayout xmlns:android"http://schemas.android.…

科技|全球首款飞行汽车开始量产!下月开始预售,2023年后或可实现一键打“飞车”...

来源&#xff1a; 世界科技创新论坛飞机与汽车结合的产物真的要来了。在2018全球未来出行大会上&#xff0c;吉利副总裁杨学良透露&#xff0c;由吉利控股的全资子公司、全球首家飞行汽车公司美国太力飞行汽车公司推出的“全球首款量产飞行汽车”——Transition&#xff0c;将于…

Android手势锁实现

最终效果如下 整体思路 a、自定义了一个RelativeLayout(GestureLockViewGroup)在里面会根据传入的每行的个数&#xff0c;生成多个GestureLockView&#xff08;就是上面一个个小圈圈&#xff09;&#xff0c;然后会自动进行布局&#xff0c;里面的宽度&#xff0c;间距&#x…

quartz详解

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目&#xff0c;它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个&#xff0c;百个&#xff0c;甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。…

智能连接:5G与人工智能、物联网等技术的超级融合

来源&#xff1a;资本实验室随着新技术的成熟&#xff0c;新型的、先进的应用将来自5G、人工智能&#xff08;AI&#xff09;和物联网&#xff08;IoT&#xff09;的融合。这种融合将创造出一个智能连接的世界&#xff0c;对所有个人、行业、社会和经济产生积极影响。从现在到2…

一个绚丽的loading动效分析与实现!

最终效果如下 从效果上看&#xff0c;我们需要考虑以下几个问题&#xff1a; 1.叶子的随机产生&#xff1b; 2.叶子随着一条正余弦曲线移动&#xff1b; 3.叶子在移动的时候旋转&#xff0c;旋转方向随机&#xff0c;正时针或逆时针&#xff1b; 4.叶子遇到进度条&#xff…

SQL Server中行列转换 Pivot UnPivot (转载)

SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名&#xff08;即行转列&#xff09;&#xff0c;在SQL Server 2000可以用聚合函数配合CASE语句实现PIVOT的一般语法是&#xff1a;PIVOT(聚合函数(列) FOR 列 in (…) )AS P 完整语法&#xff1a; table_source PI…

20岁的谷歌,和它“最成功”的大败笔

来源&#xff1a;大数据文摘编译&#xff1a;张驰、JIN、涂世文、钱天培谷歌20岁了&#xff01;20年中&#xff0c;谷歌打造了无数或成功或流产的产品&#xff0c;其中&#xff0c;这一名为“谷歌光纤”计划的失败或许是它最“成功”的“大败笔”。2010年&#xff0c;谷歌宣布了…

什么是REST?

REST是Representational State Transfer的简称&#xff0c;表征状态转移。它是一种设计风格。 维基上对其风格的表述为&#xff1a; 资源是由URI来指定。对资源的操作包括获取、创建、修改和删除资源&#xff0c;这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。通…

自定义viewgroup实现ArcMenu

最终效果如下 实现思路 通过效果图&#xff0c;会有几个问题&#xff1a; a、动画效果如何实现 可以看出动画是从顶点外外发射的&#xff0c;可能有人说&#xff0c;那还不简单&#xff0c;默认元素都在定点位置&#xff0c;然后TraslateAnimation就好了&#xff1b;这样忽略…

也谈谈Atiyah关于黎曼猜想的证明

来源&#xff1a;潇轩社作者&#xff1a;叶扬波 著名数学家&#xff0c;美国爱荷华大学教授。作为数论学家&#xff0c;他在中国大陆出版有《迹公式与模形式》等专著。以下是他谈Atiyah关于黎曼猜想的证明的文章&#xff0c;观点专业而且独到&#xff0c;转载此文&#xff0c;…

大型Javascript应用架构的模式(译文)

附上翻译好的word文件 http://files.cnblogs.com/lizhug/Patterns_For_Large-Scale_JavaScript_Application_Architecture.zip 作者&#xff1a;Addy Osmani 技术评审&#xff1a;Andree Hansson 翻译&#xff1a;李珠刚 珠刚参上 今天我们将要探讨一系列用于大型Javascri…

Animation Property Animation 使用

本篇主要讲Animation 和 Property Animation的使用&#xff0c;最后会讲QQ管家桌面火箭作为例子&#xff1a; 在Android中开发动效有两套框架可以使用&#xff0c;分别为 Animation 和 Property Animation&#xff1b; 相对来说&#xff0c;Animator比Animation要强大太多&…