我有一个字符串:
var path = "d:\\project\\Bloomberg\\trunk\\UI.Demo\\";
我正在尝试替换\\
为\
.
我试过这个:
path = path.Replace("\\\\", "\\");
path = path.Replace(@"\\", @"\");
这些都没有用单反斜杠代替双反斜杠。
path
不包含任何双反斜杠。"blah\\blah"
实际上是blah\blah
。
在普通字符串文字(不以 开头@
)中,您需要通过在它们前面放置反斜杠 ( \
) 来转义某些字符。其中一个字符是反斜杠本身,所以如果你想把一个反斜杠放到一个字符串中,你可以用另一个反斜杠对其进行转义,这就是为什么path
包含所有这些双反斜杠的原因。在运行时,这些将是单个反斜杠。
有关可用的转义序列,请参见此处:C# FAQ:Escpape 序列
另一方面,逐字字符串(以 开头@
)不需要对大多数字符进行转义。@"\"
原来如此\
。您需要在逐字字符串中转义的唯一字符是引号。您只需键入双引号即可。@""""
实际上也是如此"
。
所以如果你想放入d:\project\Bloomberg\trunk\UI.Demo\
一个字符串,你有两种可能性。
普通字符串文字(注意\
已转义):
var path = "d:\\project\\Bloomberg\\trunk\\UI.Demo\\";
或逐字字符串文字(无需转义\
):
var path = @"d:\project\Bloomberg\trunk\UI.Demo\";
你别忘了放@?你链子前面说的?
var path = @"d:\\project\\Bloomberg\\trunk\\UI.Demo\\";
但是那个 -> @"d:\project\Bloomberg\trunk\UI.Demo\";
是平等的->“d:/project/Bloomberg/trunk/UI.Demo/”;
在此字符串中\\
,转义为\
:
var path = "d:\\project\\Bloomberg\\trunk\\UI.Demo\\";
所以这实际上是说:
@"d:\project\Bloomberg\trunk\UI.Demo\"
因此,当您替换为时\\
,\
您不会替换任何东西。双斜线看起来像\\\\
普通字符串。您在替换方法中正确执行了该操作。
改变:
var path = "d:\\project\\Bloomberg\\trunk\\UI.Demo\\";
到:
var path = @"d:\\project\\Bloomberg\\trunk\\UI.Demo\\";
你会很好的。请记住,这\\
意味着\
在普通字符串中,因此如果您想要实际的双反斜杠,您需要使用\\\\
或简单地在字符串前面加上 @ - 就像在调用 Replace 时一样。
其次,您可能不需要在特定情况下调用 Replace,因为\\
您看到的实际上是单个反斜杠,因为您的字符串没有以 @ 为前缀,并且转义序列被评估。