關(guān)于C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.NET4中的使用介紹方法
C# 5.0 給我們帶來了三個(gè)非常有用的編譯器特性
CallerMemberName
CallerFilePath
CallerLineNumber
在C與C++中由下列字符幫助我們實(shí)現(xiàn)調(diào)試消息的文件行號(hào)
.#define debug_msg printf("%s[%d]:",__FILE__,__LINE__);printf
在.NET 4中與其功能相等的是
new StackTrace(true).GetFrame(1).GetMethod().Name(注意,是功能相等,但實(shí)現(xiàn)不同,.NET4中是運(yùn)行時(shí)獲取,而C#5.0 中應(yīng)該是編譯時(shí)指定,原因參考以下)
在C#5.0中我們可以用以下代碼實(shí)現(xiàn)調(diào)試信息文件行號(hào)獲取:
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編譯調(diào)試,便能看見文件,行號(hào),調(diào)用者方法名稱。
三個(gè)特性是.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 { }
}
為了編譯時(shí).NET4和.NET4.5兼容,可以用預(yù)處理指令增加編譯條件,在4.5下編譯以上代碼。
關(guān)鍵點(diǎn)來了,在.NET4下定義以上屬性后,用VS2010編譯,無相關(guān)信息輸出,
用VS2012重新編譯,則會(huì)輸出相關(guān)信息(注意實(shí)在.NET4下),說明這個(gè)特性是編譯器特性。也就是說我們可以在VS2012里寫.NET4項(xiàng)目時(shí)用以上特性。
- C#中enum和string的相互轉(zhuǎn)換
- C#中FlagsAttribute屬性在enum中的應(yīng)用詳解
- C# IQueryable及IEnumerable區(qū)別解析
- C# IEnumerable和IEnumerator接口淺析
- c# EnumHelper枚舉常用操作類
- C#使用LINQ中Enumerable類方法的延遲與立即執(zhí)行的控制
- C#中IEnumerable、ICollection、IList、List之間的區(qū)別
- C#中IEnumerable接口用法實(shí)例分析
- C#中的IEnumerable簡介及簡單實(shí)現(xiàn)實(shí)例
- C#中的IEnumerable接口深入研究
- 基于C#中IDisposable與IEnumerable、IEnumerator的應(yīng)用
- c# 怎樣簡潔高效的實(shí)現(xiàn)多個(gè) Enum 自由轉(zhuǎn)換
相關(guān)文章
C#中的靜態(tài)成員、靜態(tài)方法、靜態(tài)類介紹
本文主要介紹了C#中的靜態(tài)成員、靜態(tài)方法、靜態(tài)類的基礎(chǔ)的使用,并做了相關(guān)的代碼演示,供初學(xué)者參考。2016-03-03HttpWebRequest實(shí)現(xiàn)下載圖片至本地
這篇文章主要為大家詳細(xì)介紹了HttpWebRequest實(shí)現(xiàn)下載圖片至本地,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07C#實(shí)現(xiàn)創(chuàng)建桌面快捷方式與添加網(wǎng)頁到收藏夾的示例
本文是介紹了c#通過純代碼創(chuàng)建快捷方式與添加網(wǎng)頁到收藏夾,非常具有實(shí)用價(jià)值,有需要的朋友可以來了解一下。2016-10-10C#創(chuàng)建壓縮文件的實(shí)現(xiàn)代碼
本篇文章主要介紹了C# 創(chuàng)建壓縮文件的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05C#獲取真實(shí)IP地址(IP轉(zhuǎn)為長整形、判斷是否內(nèi)網(wǎng)IP的方法)
這篇文章主要介紹了C#獲取真實(shí)IP地址的實(shí)現(xiàn)代碼,包含把IP轉(zhuǎn)為長整形、判斷是否是私網(wǎng)、內(nèi)網(wǎng)IP的方法,需要的朋友可以參考下2014-08-08