2013-02-15 31 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"更舒服。

相关问题