Заменить \\ на \ in C#
У меня есть длинная строка (путь) с двойной обратной косой чертой, и я хочу заменить ее одиночной обратной косой чертой:
string a = "a\\b\\c\\d";
string b = a.Replace(@"\\", @"\");
Этот код ничего не делает...
b
остатки "a\\b\\c\\d"
Я также пробовал разные комбинации обратной косой черты вместо использования @
, но не повезло.
5 ответов
В C# вы не можете иметь такую строку, как "a\b\c\d"
, поскольку \
имеет особое значение: он создает escape-последовательность вместе со следующей буквой (или комбинацией цифр).
\b
представляет собой на самом деле забой, и \c
а также \d
являются недопустимыми escape-последовательностями (компилятор будет жаловаться на "Нераспознанную escape-последовательность").
Так как же создать строку с простым \
? Вы должны использовать обратную косую черту, чтобы отделить обратную косую черту:\\
(это последовательность пробелов, которая представляет одну обратную косую черту).
Это означает, что строка "a\\b\\c\\d"
на самом деле представляет a\b\c\d
(это не представляет a\\b\\c\\d
так что двойных обратных косых черт нет). Вы сами это увидите, если попытаетесь напечатать эту строку.
В C# также есть функция, называемая дословными строковыми литералами (строки, начинающиеся с @
), что позволяет писать @"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(@"\", @"\");
но, например, если мы сгенерируем команду DOS с помощью кода C#... например:- чтобы удалить файл, это поможет
Я сделал это в коде приложения 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;
}
а те, что без символа @, действительно сработали. это С# 8 и С# 9