在C#中用\替换\\

我有一个带有双反斜杠的长字符串(路径),我想用单个反斜杠替换它:

string a = "a\\b\\c\\d"; string b = a.Replace(@"\\", @"\"); 

这段代码什么都不做……

b仍然是"a\\b\\c\\d"

我也尝试了不同的反斜杠组合,而不是使用@ ,但没有运气。

在C#中,您不能拥有类似"a\b\c\d"的字符串,因为\具有特殊含义:它创建一个转义序列以及后面的字母(或数字组合)。

\b实际上表示退格, \c\d是无效的转义序列(编译器会抱怨“无法识别的转义序列”)。

那么如何用简单的\创建一个字符串呢? 您必须使用反斜杠来填充反斜杠: \\ (它是表示单个反斜杠的espace序列)。

这意味着字符串"a\\b\\c\\d"实际上表示a\b\c\d (它不代表a\\b\\c\\d ,因此没有双反斜杠)。 如果您尝试打印此字符串,您将自己看到它。

C#还有一个名为verbatim string literals (以@开头的字符串)的function,它允许你编写@"a\b\c\d"而不是"a\\b\\c\\d"

因为您声明a不使用@ ,所以字符串a在您的示例中不包含任何双斜杠。 实际上,在您的示例中, a == "a\b\c\d" ,因此Replace找不到任何要替换的内容。 尝试:

 string a = @"a\\b\\c\\d"; string b = a.Replace(@"\\", @"\"); 

你错了。 "\\"返回\ (知道逃避)

 string a = "a\\b\\c\\d"; System.Console.WriteLine(a); // prints a\b\c\d string b = a.Replace(@"\\", @"\"); System.Console.WriteLine(b); // prints a\b\c\d 

你甚至不需要string b = a.Replace(@"\\", @"\");

这很有效

你甚至不需要字符串b = a.Replace(@“\”,@“\”);

但是如果我们通过c#代码生成dos命令…例如: – 删除文件这将有帮助