2012-07-12 24 views
0

比方說,我有這樣的ClientBin文件夾中我的Visual Studio C#Web應用程序。可能有人請向我解釋什麼@「」已與System.IO.Path.Combine方法呢?

我很困惑,什麼@「」將在嘗試創建一個目錄路徑下面的C#代碼做:

String DirectoryPath = System.IO.Path.Combine(@"" + "ClientBin"); 

或者當它涉及到發文件,如以下例如:

String FilePath = System.IO.Path.Combine("admin", "access", @"" + "users.aspx"); 

基本上,可能有人請向我解釋什麼@「」已與System.IO.Path.Combine方法呢?

+0

這用於或作爲文字也可以說,你有一個文件路徑是「C:\ mypath \ myfile.txt」,這將不能被讀取,因爲返回字符,但將@放在路徑的前面解析爲一個文字路徑..這是有道理的 – MethodMan 2012-07-12 21:48:30

回答

5

添加@ 意味着任何轉義字符序列都被忽略,並且字符串被寫入 。不完全,請參閱下面的鏈接。

@ 「C:\ TEMP \ file.txt的」

相同

「C:\\溫度\\ file.txt的」

在第二種情況下\\序列意味着轉義反斜槓字符。

更新:DTB是正確的關於

看到string literals

+1

不完全。這意味着使用不同的轉義字符序列。 – dtb 2012-07-12 21:48:23

+1

@dtb - 唯一必須轉義的字符是雙引號。 – GalacticCowboy 2012-07-12 21:50:19

+0

@dtb - 感謝提及,使用了多年,並不知道 – doblak 2012-07-12 21:57:20

8

在這種情況下,它也絕對沒有什麼(可能是一個非常誤導的程序員沿途某處引起的)。通常情況下,一個字符串之前@指定逐字字符串,其中反斜槓不再作爲轉義字符處理。

這裏,@"" + "ClientBin"正好等於"" + "ClientBin",當然這等於"ClientBin"

逐字字符串解釋here

1

一個@前綴是verbatim string,但在你提供的例子,我不認爲這有任何影響;一個逐字@「」相當於一個正常的「」。

編輯:如果您對於逐字字符串是什麼感到困惑,他們基本上允許您做的是代表一個字符串,而不必擔心轉義序列 - 例如,\ n將不會呈現爲新在一個逐字字符串中,而是作爲實際的字符串\ n。爲了表示一條新線,你實際上要在這樣的代碼 中新建一條線。

1

@告訴編譯器不要將以下字符串中的任何字符視爲特殊字符。

例如,如果您有「C:\ Temp \ users.aspx」,編譯器會嘗試將\ T和\ u視爲特殊字符(如\ r \ n是回車符,換行符)可能在運行時失敗。

如果你沒有足夠的@,你將不得不您的字符串改變

"C:\\Temp\\users.aspx" 

這是醜陋的,難以閱讀恕我直言。

1

這裏,如果你有興趣查看

@符號提供2個目的在C#一個簡單的解釋:

首先,它允許您使用保留的keyowrd因爲像這樣的變量:

int @int = 15; 

第二個選項允許您指定一個字符串而不必排除任何字符。例如將「\」字符是一個轉義字符所以通常你需要做到這一點:

var myString = "c:\\myfolder\\myfile.txt" 

或者你可以這樣做:

var myString = @"c:\myFolder\myfile.txt" 
相關問題