请原谅我一个初学者的问题:)
string S="abc";
S+="\";
不会编译。
string S="abc";
S+="\\";
将使 S="abc\\"
我怎样才能使 S="abc\" ?
您的第二段代码是您想要的(或@"\"
其他人建议的逐字字符串文字),它只添加一个反斜杠 - 将其打印到控制台,您会看到。
这两段代码:
S += "\\";
和
S += @"\";
完全等价。在这两种情况下,都会附加一个反斜杠1。
我怀疑你对调试器视图感到困惑,它转义了反斜杠(和其他一些字符)。即使使用调试器,您也可以通过查看 来验证这一点S.Length
,您会看到 4 而不是 5。
1请注意,它不会更改现有字符串中的数据,但它将值设置S
为引用一个新字符串,该字符串由原始字符串和末尾的反斜杠组成。.NET 中的字符串对象是不可变的 - 但这是另一个话题......
尝试这个:
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
string S = "abs" + "\\";
应该而且确实会导致abc\
.
您可能看到的是调试器/智能感知为您可视化字符串的方式。尝试将您的字符串打印到控制台或将其显示在文本框中。
你已经有了解决方案。它在调试时出现的原因abc\\
是因为 VS 会转义反斜杠,将 的值打印S
到控制台窗口,你会看到abc\
. 您可以@
在字符串文字的开头添加一个,例如
string S="abc";
S+= @"\";
这将实现同样的目标。
您可以使用 @ 字符转义反斜杠:
string S="abc";
S += @"\";
但这完全完成了您在第二个示例中编写的内容。对此的困惑源于 Visual Studio 调试器继续转义这些字符,即使您的源字符串仅包含一个反斜杠。
你的第二个例子很好
string S="abc";
S+="\\";
Visual Studio 显示字符串已转义,这就是您在结果字符串中看到两个斜杠的原因。如果您不想像这样使用转义声明字符串
@"\"
这不是编译,因为编译器在转义符号后需要一个字符
string S="abc";
S+="\";
string S="abc";
S+="\\";
Console.WriteLine(S); // This is what you're missing ;)
你会看到你的字符串完全没有错。
反斜杠 ( \
) 是一个转义字符,它允许您获取通常无法在字符串中插入的特殊字符,例如"\r\n"
,它代表一个NewLine
字符,或者"\""
基本上给您一个"
字符。
为了获得\
角色,您需要输入"\\"
您正在做什么以及您想要什么。
使用逐字 ( @
) 替换所有出现的\
into \\
, 所以@"\" == "\\"
。这通常用于\
需要大量文字的路径和正则表达式。说@"C:\MyDirectory\MyFile"
起来总比说起来舒服"C:\\MyDirectory\\MyFile"
。
尝试这个
string s="abc";
s = s+"\\";