Почему .NET добавляет дополнительную косую черту к уже существующим косым чертам в пути? - PullRequest
9 голосов
/ 29 марта 2011

Я заметил, что C # добавляет дополнительные косые черты (\) к путям.Рассмотрим путь C:\Test.Когда я проверяю строку с этим путем в текстовом визуализаторе, фактическая строка равна C:\\Test.

Почему это?Это смущает меня, так как иногда я могу захотеть разделить путь (используя string.Split()), но мне интересно, какую строку использовать (одну или две косые черты).

Ответы [ 4 ]

16 голосов
/ 29 марта 2011

\\ используется, потому что \ является escape-символом и должен представлять одиночный \.

Так что он говорит, что первый \ трактуется как escape-символа затем второе \ принимается за фактическое значение.Если бы не следующий символ после первого \ был бы проанализирован как экранированный символ.

Вот список доступных escape-символов:

\' - single quote, needed for character literals
\" - double quote, needed for string literals
\\ - backslash
\0 – Null 
\a - Alert 
\b - Backspace 
\f - Form feed 
\n - New line 
\r - Carriage return 
\t - Horizontal tab 
\v - Vertical quote 
\u - Unicode escape sequence for character 
\U - Unicode escape sequence for surrogate pairs. 
\x - Unicode escape sequence similar to "\u" except with variable length.

РЕДАКТИРОВАТЬ: Чтобы ответить на ваш вопрос относительно Split, это не должно быть проблемой.Используйте Split как обычно.\\ будет считаться только одним символом \.

11 голосов
/ 29 марта 2011

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

  • Строковые строки: с префиксом @, исключающие необходимость экранирования \\ символов
  • Обычные строки: Стандартные строки в стиле C, где \\ символам необходимо экранировать себя

Отладчик будет отображать строковый литерал в виде обычной строки в сравнении с дословной строкой. Хотя это просто проблема отображения, она не влияет на ее базовое значение.

6 голосов
/ 29 марта 2011

Визуализаторы отладчика отображают строки в том виде, в котором они будут отображаться в коде C #.Поскольку \ используется для экранирования символов в невербальных строках C #, \\ является правильной экранированной формой.

0 голосов
/ 18 февраля 2016

Хорошо, поэтому приведенные выше ответы не совсем верны.Поэтому я добавляю свои выводы для следующего человека, который читает этот пост.

Вы не можете разбить строку, используя любые символы из таблицы выше, если вы читаете указанные строки из внешнего источника.

т.е.

string[] splitStrings = File.ReadAllText([path]).Split((char)7);

не будет разделяться этими символами.Однако внутренне созданные строки работают нормально.

, т. Е.

string[] splitStrings = "hello\agoodbye".Split((char)7);

Это может не соответствовать другим методам чтения текста из файла.Я не уверен, так как я не проверял другие методы.Имея это в виду, вероятно, лучше не использовать эти символы для разделения строк!

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