我有一个带有双反斜杠的长字符串(路径),我想用单反斜杠替换它:
string a = "a\\b\\c\\d";
string b = a.Replace(@"\\", @"\");
这段代码什么都不做...
b
遗迹"a\\b\\c\\d"
我还尝试了不同的反斜杠组合而不是使用@
,但没有运气。
我有一个带有双反斜杠的长字符串(路径),我想用单反斜杠替换它:
string a = "a\\b\\c\\d";
string b = a.Replace(@"\\", @"\");
这段代码什么都不做...
b
遗迹"a\\b\\c\\d"
我还尝试了不同的反斜杠组合而不是使用@
,但没有运气。
因为您声明a
时没有使用 using @
,所以该字符串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(@"\\", @"\");
在 C# 中,不能有类似 的字符串"a\b\c\d"
,因为\
具有特殊含义:它创建一个转义序列以及后面的字母(或数字组合)。
\b
实际上表示退格,\c
并且\d
是无效的转义序列(编译器会抱怨“无法识别的转义序列”)。
那么如何用简单的\
. 您必须使用反斜杠来分隔反斜杠:(\\
它是表示单个反斜杠的 espace 序列)。
这意味着字符串"a\\b\\c\\d"
实际上代表a\b\c\d
(它不代表a\\b\\c\\d
,所以没有双反斜杠)。如果您尝试打印此字符串,您将自己看到它。
C# 还有一个称为逐字字符串文字(以 开头的字符串@
)的功能,它允许您编写@"a\b\c\d"
而不是"a\\b\\c\\d"
.
这行得通
你甚至不需要 string b = a.Replace(@"\", @"\");
但就像我们通过 c# 代码生成一个 dos 命令一样......例如:- 删除一个文件,这将有所帮助
我在 UWP 应用程序的代码中执行了此操作。
foreach (var item in Attendances)
{
string a = item.ImagePath;
string b = a.Replace(@"\\", "/");
string c = a.Replace("\\", "/");
Console.WriteLine(b);
Console.WriteLine(a);
item.ImagePath = c;
}
没有@ 符号的是实际工作的那个。这是 C# 8 和 C# 9