string.replace серьезно сломан с \ - PullRequest
0 голосов
/ 07 мая 2010
"C://test/test/test.png" -> blub

    blub = blub.Replace(@"/", @"\");

result = "C:\\\\test\\test\\test.png"

как это имеет смысл?Он заменяет один / два \

?

Ответы [ 7 ]

9 голосов
/ 07 мая 2010

Это на самом деле работает:

string blub = "C://test/test/test.png";
string blub2 = blub.Replace(@"/", @"\");

Console.WriteLine(blub);
Console.WriteLine(blub2);

Вывод:

C://test/test/test.png
C:\\test\test\test.png

НО просмотр строки в отладчике действительно показывает эффект, который вы описываете (и как вы бы написали строковый литералв коде без @).

Я заметил это раньше, но так и не узнал, почему отладчик выбирает это форматирование.

8 голосов
/ 07 мая 2010

Нет, это не так.

То, что вы видите, это правильно отформатированная строка в соответствии с правилами C #, и, поскольку вывод, который вы видите, отображается так, как будто вы не добавили префикс с символом @, каждый обратный слеш удваивается, потому что это то, что вам нужно было бы написать, если бы вы сначала хотели эту строку.

Создайте новое консольное приложение и запишите результат в консоль, и вы увидите, что строка выглядит так, как вы этого хотели.

Так что это просто артефакт того, как вы смотрите на строку (я полагаю, отладчик).

3 голосов
/ 07 мая 2010

Символ \ в C # является escape-символом, поэтому, если вы собираетесь использовать его как символ \, вам нужно два - в противном случае следующий символ обрабатывается специально (новая строка и т. Д.).

См. Какие доступны escape-последовательности символов? (C #)

2 голосов
/ 07 мая 2010

Символ \ является специальным символом, который изменяет значение символа после него в строковых литералах. Поэтому, когда вы ссылаетесь на \, его нужно экранировать: \\.

1 голос
/ 07 мая 2010

Сделано, что должно. "\\" совпадает с @"\"

"\" является escape-символом. Без буквенного обозначения "@" перед строкой одиночный \ отображается как "\\"

1 голос
/ 07 мая 2010

Поиск «escape-символов».

0 голосов
/ 07 мая 2010

Вы должны дважды подумать, прежде чем сказать что-то подобное ...

Функция string.Replace - это базовая функциональность, которая существует уже долгое время .... Всякий раз, когда вы обнаруживаете, что у вас есть проблемы с чем-то подобным, это, вероятно, не функция, которая нарушается, а ваше понимание или использование это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...