在c#中用单个斜杠替换双向后斜杠

时间:2012-11-20 21:27:17

标签: c# string escaping

我需要将双引号替换为单引号,以便像这样

\\\\servername\\dir1\\subdir1\\

变为

\\servername\dir1\subdir1\

我试过这个

string dir = "\\\\servername\\dir1\\subdir1\\";
string s = dir.Replace(@"\\", @"\"); 

我得到的结果是

\\servername\\dir1\\subdir1\\

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

您无需在此更换任何内容。反斜杠被转义,这就是它们加倍的原因 就像\t代表制表符一样,\\代表一个\。您可以看到转义序列 on MSDN的完整列表。

string dir = "\\\\servername\\dir1\\subdir1\\";
Console.WriteLine(dir);

这将输出\\servername\dir1\subdir1\

BTW:您可以使用逐字字符串使其更具可读性:

string dir = @"\\servername\dir1\subdir1\";

答案 1 :(得分:1)

替换代码没有问题。你得到的结果是:

\servername\dir1\subdir1\

当您在调试器中查看结果时,它显示为将写为文字字符串,因此反斜杠字符显示为两个反斜杠字符。

您创建的字符串不是您认为的那样。这段代码:

string dir = "\\\\servername\\dir1\\subdir1\\";

生成一个包含以下内容的字符串:

\\servername\dir1\subdir1\

替换代码会替换字符串开头的\\

如果要生成字符串\\\\servername\\dir1\\subdir1\\,请使用:

string dir = @"\\\\servername\\dir1\\subdir1\\";

或:

string dir = "\\\\\\\\servername\\\\dir1\\\\subdir1\\\\";

答案 2 :(得分:0)

此字符串"\\\\servername\\dir1\\subdir1\\"@"\\servername\dir1\subdir1\"相同。为了逃避反斜杠,你需要在字符串前使用@符号,或者使用双反斜杠而不是一个。

为什么需要它?因为用于escape sequences的C#反斜杠。