关于C#5.0CallerMemberNameCallerFilePathCallerLineNumber在.NET4中的使用介绍方法
2023-06-13 09:14:49 时间
C#5.0给我们带来了三个非常有用的编译器特性
CallerMemberName
CallerFilePath
CallerLineNumber
在C与C++中由下列字符帮助我们实现调试消息的文件行号
.#definedebug_msgprintf("%s[%d]:",__FILE__,__LINE__);printf
在.NET4中与其功能相等的是
newStackTrace(true).GetFrame(1).GetMethod().Name(注意,是功能相等,但实现不同,.NET4中是运行时获取,而C#5.0中应该是编译时指定,原因参考以下)
在C#5.0中我们可以用以下代码实现调试信息文件行号获取:
publicstaticvoidTraceMessage(stringmessage,
[CallerMemberName]stringmemberName="",
[CallerFilePath]stringsourceFilePath="",
[CallerLineNumber]intsourceLineNumber=0)
{
Trace.WriteLine("message:"+message);
Trace.WriteLine("membername:"+memberName);
Trace.WriteLine("sourcefilepath:"+sourceFilePath);
Trace.WriteLine("sourcelinenumber:"+sourceLineNumber);
}
用VS2012编译调试,便能看见文件,行号,调用者方法名称。
三个特性是.NET4.5里面的,如果在.NET4中使用那么请定义一下特性:
namespaceSystem.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Parameter,AllowMultiple=false,Inherited=false)]
publicclassCallerMemberNameAttribute:Attribute{}
[AttributeUsage(AttributeTargets.Parameter,AllowMultiple=false,Inherited=false)]
publicclassCallerFilePathAttribute:Attribute{}
[AttributeUsage(AttributeTargets.Parameter,AllowMultiple=false,Inherited=false)]
publicclassCallerLineNumberAttribute:Attribute{}
}
为了编译时.NET4和.NET4.5兼容,可以用预处理指令增加编译条件,在4.5下编译以上代码。
关键点来了,在.NET4下定义以上属性后,用VS2010编译,无相关信息输出,
用VS2012重新编译,则会输出相关信息(注意实在.NET4下),说明这个特性是编译器特性。也就是说我们可以在VS2012里写.NET4项目时用以上特性。
相关文章
- c# 方法调用链System.Diagnostics.StackTrace[通俗易懂]
- c# mysql executenonquery_C#与数据库访问技术之ExecuteNonQuery方法
- 使用C# 11的静态接口方法改进 面向约定 的设计
- 开心档之C# 匿名方法我们已经提到过,委托是用于引用与其具有相同标签的方法。换句话说,您可以使用委托对象调用可由委托引用的方法。匿名方法(Anonymou
- 【愚公系列】2023年01月 .NET/C#知识点-List对象去重的方法总结
- 【Unity3D】Unity 中使用 C# 调用 Java ② ( C# 调用 Java 的相关方法介绍 | 调用 Java 方法 | 获取 Java 字段 | 设置 Java 字段 )
- 使用C#开发Socket通讯的方法
- ToString()使用方法汇总(c#)
- C#使用DllImport调用非托管的代码的方法
- C#设置系统日期格式的方法
- 深入C#winform清除由GDI绘制出来的所有线条或图形的解决方法
- 解决C#获取鼠标相对当前窗口坐标的实现方法
- C#泛型的简单理解(安全、集合、方法、约束、继承)分享
- C#对DataTable里数据排序的方法
- C#测量程序运行时间及cpu使用时间实例方法
- C#匿名委托和Java匿名局部内部类使用方法示例
- c#加密类使用方法示例
- C#使用FolderBrowserDialog类实现选择打开文件夹方法详解
- C#正则表达式使用方法示例
- c#split分隔字符串使用方法
- c#自带缓存使用方法c#移除清理缓存
- SQLServer中调用C#类中的方法实例(使用.NET程序集)
- C#串口通信实现方法
- C#Winform中实现主窗口打开登录窗口关闭的方法
- C#利用XML创建Excel文档的实现方法
- C#用ComboBox控件实现省与市的联动效果的方法
- 使用C#实现在word中插入页眉页脚的方法
- C#使用iCSharpcode进行文件压缩实现方法
- KMP算法的C#实现方法