10

请原谅我一个初学者的问题:)

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

不会编译。

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

将使 S="abc\\"

我怎样才能使 S="abc\" ?

4

8 回答 8

16

您的第二段代码您想要的(或@"\"其他人建议的逐字字符串文字),它只添加一个反斜杠 - 将其打印到控制台,您会看到。

这两段代码:

S += "\\";

S += @"\";

完全等价。在这两种情况下,都会附加一个反斜杠1

我怀疑你对调试器视图感到困惑,它转义了反斜杠(和其他一些字符)。即使使用调试器,您也可以通过查看 来验证这一点S.Length,您会看到 4 而不是 5。


1请注意,它不会更改现有字符串中的数据,但它将值设置S为引用一个字符串,该字符串由原始字符串和末尾的反斜杠组成。.NET 中的字符串对象是不可变的 - 但这是另一个话题......

于 2013-02-15T13:19:40.463 回答
5

尝试这个:

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

@= 逐字字符串文字

http://msdn.microsoft.com/en-us/library/aa691090%28v=vs.71%29.aspx

http://msdn.microsoft.com/en-us/library/vstudio/362314fe.aspx

于 2013-02-15T13:19:26.970 回答
4
string S = "abs" + "\\";  

应该而且确实会导致abc\.

您可能看到的是调试器/智能感知为您可视化字符串的方式。尝试将您的字符串打印到控制台或将其显示在文本框中。

于 2013-02-15T13:20:49.127 回答
2

你已经有了解决方案。它在调试时出现的原因abc\\是因为 VS 会转义反斜杠,将 的值打印S到控制台窗口,你会看到abc\. 您可以@在字符串文字的开头添加一个,例如

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

这将实现同样的目标。

于 2013-02-15T13:19:46.543 回答
2

您可以使用 @ 字符转义反斜杠:

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

但这完全完成了您在第二个示例中编写的内容。对此的困惑源于 Visual Studio 调试器继续转义这些字符,即使您的源字符串仅包含一个反斜杠。

于 2013-02-15T13:20:07.470 回答
1

你的第二个例子很好

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

Visual Studio 显示字符串已转义,这就是您在结果字符串中看到两个斜杠的原因。如果您不想像这样使用转义声明字符串

@"\"

这不是编译,因为编译器在转义符号后需要一个字符

string S="abc";
S+="\";
于 2013-02-15T13:22:25.860 回答
0
string S="abc";
S+="\\";
Console.WriteLine(S); // This is what you're missing ;)

你会看到你的字符串完全没有错。

反斜杠 ( \) 是一个转义字符,它允许您获取通常无法在字符串中插入的特殊字符,例如"\r\n",它代表一个NewLine字符,或者"\""基本上给您一个"字符。

为了获得\角色,您需要输入"\\"您正在做什么以及您想要什么。

使用逐字 ( @) 替换所有出现的\into \\, 所以@"\" == "\\"。这通常用于\需要大量文字的路径和正则表达式。说@"C:\MyDirectory\MyFile"起来总比说起来舒服"C:\\MyDirectory\\MyFile"

于 2013-02-15T13:26:15.447 回答
-2

尝试这个

 string s="abc";
 s = s+"\\";
于 2013-02-15T13:23:27.887 回答