时间:2021-05-19
C# 5.0 给我们带来了三个非常有用的编译器特性
CallerMemberName
CallerFilePath
CallerLineNumber
在C与C++中由下列字符帮助我们实现调试消息的文件行号
复制代码 代码如下:
.#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项目时用以上特性。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了本文章介绍了在c#,vb.net,sql中来判断指定日期是否为闰年的方法。分享给大家供大家参考。具体实现方法如下:C#代码如下:复制代码代码如下:
本文实例讲述了C#实现Log4Net日志分类和自动维护的实现方法。分享给大家供大家参考。具体实现方法如下:一、背景在程序中,我们调试运行时信息,Log4Net是
.net使用escape和unescape方法:在C#里,使用escape和unescape,添加引用:Microsoft.JScriptstringstrEs
C#控制台程序使用Log4net日志组件,供大家参考,具体内容如下1、Log4net一般都不陌生,但是在配置上不同类型的项目又不相同的地方比如C#控制台程序和C
本文介绍了在C#中实现类似MFC中CRectTracker类的方法。本文用到的组件源码及测试程序下载地址本例的开发环境:VisualStudio.NET2003