2011年11月16日 星期三

C# 字串中處理逸出字元的小技巧 及 @符號的多種使用


和 VB 不同, C# 在字串裡面對於反斜線符號有其特殊的定義, 因為它是所謂的逸出字元 (Escape Character)。所以你可以在字串中使用 \n 代表換行符號、使用 \t 代表 TAB 符號等等。 
然而, 如果你要在字串中表示資料夾路徑的話, 就會比較麻煩了, 例如: 
 string filePath = "C:\My Documents\Johnny\"; 
如果這麼寫, 你只會看到錯誤訊息。你必須修改成: 
 string filePath = "C:\\My Documents\\Johnny\\"; 
你必須使用 "\\" 來代表 "\" 這個字元。 

不過如果你在字串中有許多反斜線符號, 其實你可以使用一個小技巧來迴避這個小麻煩, 那就是使用 @ 符號: 
 string filePath = @"C:\My Documents\Johnny\"; 
這個 @ 符號是 C# 專用的, 很可惜 VB 的使用者享受不到這個好處。或許 VB 的使用者可能以為 @ 對他們本來就是多此一舉, 其實也不然; 因為 @ 符號還有其它更好用的地方, 例如: 
 string myScript = @"<br />&lt;script lanuage=""JavaScript""&gt;<br />&lt;/script&gt;"; 
換句話說, 巧妙的使用 @ 符號, 你就可以很輕易的把一整段文字寫進一個文字變數裡面, 而不需要使用一長串的 + 或 &amp; (還會影響執行時期效能) 或是 StringBuilder 的 Append 指令等等。所以針對這一點, VB 使用者是應該羨慕 C# 使用者的。



@符號的多種使用

1.限定字串
用 @ 符號加在字串前面表示其中的轉義字元“不”被處理。
如果我們寫一個檔的路徑,例如"D:\文本檔"路徑下的text.txt檔,不加@符號的話寫法如下:
string fileName= "D:\\文本檔\\text.txt"; 
如果使用@符號就會比較簡單:
string fileName= @"D:\文本檔\text.txt"; 

2.讓字串跨行
有時候一個字串寫在一行中會很長(比如SQL語句),不使用@符號,一種寫法是這樣的:
string strSQL= "SELECT * FROM HumanResources.Employee AS e"
    + " INNER JOIN Person.Contact AS c"
    + " ON e.ContactID = c.ContactID"
    + " ORDER BY c.LastName"; 
加上@符號後就可以直接換行了:
string strSQL= @"SELECT * FROM HumanResources.Employee AS e
     INNER JOIN Person.Contact AS c
     ON e.ContactID = c.ContactID
     ORDER BY c.LastName"; 

3.在識別字中的用法
C#是不允許關鍵字作為識別字(類名、變數名、方法名、表空間名等)使用的,但如果加上@之後就可以了,例如:
namespace @namespace
{
    class @class
     {
        public static void @static(int @int)
         {
            if (@int> 0)
             {
                 System.Console.WriteLine("Positive Integer");
             }
            else if (@int== 0)
             {
                 System.Console.WriteLine("Zero");
             }
            else
             {
                 System.Console.WriteLine("Negative Integer");
             }
         }
     }
}

沒有留言:

張貼留言