Избегайте двойных кавычек в строке

173

Двойные кавычки можно экранировать следующим образом:

string test = @"He said to me, ""Hello World"". How are you?";

Но это включает в себя добавление символа "в строку. Существует ли функция C # или другой метод для избежания двойных кавычек, чтобы не требовалось никаких изменений в строке?

Мудассир Хасан
источник
5
Вы можете использовать \ "Hello World \", как это
Pandian
1
Что вы действительно хотите в результате? «становится» в буквальной строке.
Roel
Аналогичный вопрос для C / C ++ (поскольку это может быть самый популярный поисковый движок): как я могу получить двойные кавычки в строковый литерал?
Питер Мортенсен

Ответы:

226

Нет.

Либо используйте дословные строковые литералы как есть, либо избегайте "использования обратной косой черты.

string test = "He said to me, \"Hello World\" . How are you?";

Строка не изменилась ни в одном случае - в ней экранирован единственный ". Это просто способ сказать C #, что символ является частью строки, а не ограничителем строки.

Одед
источник
81

Вы можете использовать обратную косую черту в любом случае;

string str = "He said to me, \"Hello World\". How are you?";

Это печатает;

He said to me, "Hello World". How are you?

с точно такими же отпечатками;

string str = @"He said to me, ""Hello World"". How are you?";

Вот DEMO .

" все еще является частью вашей строки.

Проверьте Escape Sequencesи String literalsиз MSDN.

Soner Gönül
источник
18

В C # вы можете использовать обратную косую черту для добавления специальных символов в вашу строку. Например, чтобы поставить ", нужно написать \". Есть много символов, которые вы пишете с помощью обратной косой черты: Обратная косая черта с номером:

  • \ 000 ноль
  • \ 010 Backspace
  • \ 011 горизонтальная вкладка
  • \ 012 новая линия
  • \ 015 возврат каретки
  • \ 032 заменитель
  • \ 042 двойная кавычка
  • \ 047 одинарная кавычка
  • \ 134 обратная косая черта
  • \ 140 серьезный акцент

Обратная косая черта с другим персонажем

  • колокол (оповещение)
  • \ b Backspace
  • \ f Formfeed
  • \ n Новая строка
  • возврат каретки
  • \ t Горизонтальная вкладка
  • \ v Вертикальная вкладка
  • \ 'Одинарная кавычка
  • \ "Двойная кавычка
  • \ Обратная косая черта
  • \? Буквальный знак вопроса
  • \ ooo ASCII символ в восьмеричной записи
  • \ x hh ASCII символ в шестнадцатеричной записи
  • \ x hhhh Символ Unicode в шестнадцатеричной записи, если эта escape-последовательность используется в константе широких символов или строковом литерале Unicode. Например, WCHAR f = L '\ x4e00' или WCHAR b [] = L "Китайский символ для одного - \ x4e00".
Даниэль Антоколетц
источник
6

Вы недоразумение, убегая.

Дополнительные "символы являются частью строкового литерала; они интерпретируются компилятором как единое целое " .

Фактическое значение вашей строки по-прежнему He said to me , "Hello World".How are you ?, как вы увидите, если вы напечатаете его во время выполнения.

SLaks
источник
4

Пожалуйста, объясните вашу проблему. Ты говоришь:

Но это включает в себя добавление символа "к строке.

Что это за проблема? Вы не можете печатать string foo = "Foo"bar"";, потому что это вызовет ошибку компиляции. Что касается добавляемой части, в терминах размера строки это не так:

@"""".Length == "\"".Length == 1
CodeCaster
источник