2013-02-15 94 views
7

請原諒我一個初學者的問題:)我怎樣才能符號添加到字符串的結尾在C#

string S="abc"; 
S+="\"; 

不會請編譯。

string S="abc"; 
S+="\\"; 

將使S = 「ABC \\」

我怎樣才能使S = 「ABC \」?

+0

使用\ u005c代替\並檢查它。 – Rahil2952 2013-02-15 13:20:19

+2

你的第二個例子是正確的。您可能會在監視窗口中看到S =「abc \\」,但這只是IDE聰明並轉義字符串中的字符(同樣,如果字符串中有換行符,觀察窗口將顯示「foo \ nbar 「) – 2013-02-15 13:27:07

+1

@RossMcNab,你應該做出答案。 – Mizipzor 2013-02-15 13:28:18

回答

5
+1

這與OP的第二個片段完全等效,並不能解釋發生了什麼。 – 2013-02-15 13:34:59

+1

同意 - OP擔心他們無法逃避反斜槓字符。他們的第二個例子是正確的,但visual studio調試器顯示斜槓仍然存在於字符串中(當它不存在時)。 – RainbowFish 2013-02-15 15:06:07

13

你的代碼秒一塊是你想要什麼(或逐字字符串其他人建議的@"\")和i t只添加一個反斜槓 - 將其打印到控制檯,您會看到。

這些代碼兩段:

S += "\\"; 

S += @"\"; 

恰好當量。在這兩種情況下,都會附加一個反斜槓。

我懷疑你被調試器視圖弄糊塗了,它會轉義反斜槓(和其他字符)。您可以通過查看S.Length,你會看到驗證,即使調試器是4,而不是5


注意,它不存在字符串中更改數據,但它將S的值設置爲指代新的字符串,該字符串由最初帶有反斜槓的原始字符串組成。 .NET中的字符串對象是不可變的 - 但這是一個完整的其他主題...

2

您已經有了解決方案。在調試時顯示爲abc\\的原因是因爲VS會跳出反斜槓,將S的值輸出到控制檯窗口,您將看到abc\。 您可以將@添加到字符串文字的開頭,例如,

string S="abc"; 
S+= @"\"; 

這將實現相同的目的。

+0

這與S + =「\\」具有完全相同的效果;在我看來,只是給出另一種實現相同結果的方法並不能真正幫助OP。 – 2013-02-15 13:21:15

+0

編輯一點更多的解釋。 – DGibbs 2013-02-15 13:31:30

1

可以逃脫以@字符反斜線:

string S="abc"; 
S += @"\"; 

但這完成你寫在你的第二個例子是什麼。對此的混淆源於Visual Studio調試器繼續轉義這些字符,即使您的源字符串只包含一個反斜槓。

+0

這只是給出了與OP的第二段代碼相同的結果的替代方法......這仍然會導致混淆,而不解釋OP在調試器中看到的內容。 – 2013-02-15 14:54:30

4
string S = "abs" + "\\"; 

應該並確實導致abc\

您可能看到的是調試器/智能感知器爲您呈現字符串的方式。 嘗試將字符串打印到控制檯或將其顯示在文本框中。

1

你的第二個例子是完全正常的

string S="abc"; 
S+="\\"; 

Visual Studio中顯示的字符串逃過一劫,這就是爲什麼你看到的結果字符串兩條斜線。如果你不希望使用轉義聲明字符串這樣

@"\" 

這不是因爲編譯編譯器是逃逸符號後期待一個字符

string S="abc"; 
S+="\"; 
-2

試試這個

string s="abc"; 
s = s+"\\"; 
+0

不會編譯.. – DGibbs 2013-02-15 13:25:58

+0

我試過了我的例子和它的工作。 – Utkarsh 2013-02-15 13:27:13

+2

@Ukkarsh:我敢打賭你沒有。你還沒有聲明變量's'。 – 2013-02-15 14:53:45

0
string S="abc"; 
S+="\\"; 
Console.WriteLine(S); // This is what you're missing ;) 

你會看到你的字符串沒有錯。

反斜線(\)是一個轉義字符,並允許你獲得特殊的字符,你會不會通常能夠在要插入的字符串,如"\r\n",它代表一個字符NewLine,或"\""這基本上給你一個"字符。

爲了獲得\字符,您需要輸入"\\",這正是您正在做的以及您想要的。

使用逐字(@)將所有出現的\替換爲\\,因此@"\" == "\\"。這通常用於路徑和正則表達式,其中大量需要文字\。畢竟,說出@"C:\MyDirectory\MyFile""C:\\MyDirectory\\MyFile"更舒服。

相關問題