2013-01-23 14 views
71

Podwójne cudzysłowy można uciec tak:Ucieczka podwójne cudzysłowy w ciąg

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

Ale ta polega na dodaniu charakter " do łańcucha. Czy istnieje funkcja C# lub inna metoda unikania podwójnych cudzysłowów, aby nie było potrzeby zmiany łańcucha?

+3

możesz użyć \ "Hello World \" w ten sposób – Pandian

+0

Czego tak naprawdę chcesz? "" staje się "w ciągu literowym. – Roel

Odpowiedz

103

nr

Albo używać dosłownych literały ciągów znaków, jak masz, albo uciec " użyciem backslash.

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

Łańcuch nie zmieniła się w każdym przypadku - nie jest pojedynczym uciekł" w nim. Jest to po prostu sposób, aby powiedzieć C#, że znak jest częścią łańcucha, a nie terminatorem ciągu.

5

Nieporozumienie ucieka.

Dodatkowe znaki " są częścią ciągu literowego; są interpretowane przez kompilator jako ".

Rzeczywista wartość Twojego ciągu znaków to nadal He said to me , "Hello World".How are you ?, co zobaczysz, jeśli wydrukujesz go w środowisku wykonawczym.

26

Możesz użyć ukośnika odwrotnego w obu kierunkach;

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

Drukuje;

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

, czyli dokładnie takie same odbitki z;

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

Oto DEMO.

" jest wciąż częścią Twojego ciągu.

Zapoznaj się z Escape Sequences i String literals z MSDN.

3

Proszę wyjaśnij swój problem. Mówisz:.?.

Ale ta polega na dodaniu znaku "do napisu

Jaki problem jest to, że nie można wpisać string foo = "Foo"bar"";, dlatego że będziemy powoływać się błąd kompilacji jak dla dodanie udział pod względem wielkości znaków, który nie jest prawdziwe:

@"""".Length == "\"".Length == 1 
12

w języku C# można użyć backslash umieścić znaki specjalne do łańcucha na przykład, aby umieścić”, to z domu. d, aby napisać \ ". Istnieje wiele znaków, że piszesz z zastosowaniem backslash: BACKSLASH z numerem:

  • \ 000 zerowa
  • \ 010 Backspace
  • \ 011 tab poziomy
  • \ 012 nowej linii
  • \ 015 powrót karetki
  • \ 032 substytutem
  • \ 042 cudzysłów
  • \ 047 apostrof
  • \ 134 ukośnikowe
  • \ 140 akcentem

BACKSLASH z othe postaci

  • \ dzwonu (wpisu)
  • \ b Backspace
  • \ f Formfeed
  • \ n Nowa linia
  • \ r powrót karetki
  • \ t karcie Horizontal
  • \ v karcie Vertical
  • \”Jedynka notowań znakiem
  • \” cudzysłowu
  • \ backslash
  • \? Dosłowny znak zapytania
  • \ charakteru ooo ASCII w notacji ósemkowej
  • \ x hh znaków ASCII w zapisie szesnastkowym
  • \ x hhhh znaków Unicode w zapisie szesnastkowym jeśli ta sekwencja ucieczki jest używany w szerokim charakterze stałym lub Unicode ciąg literału. Na przykład WCHAR f = L '\ x4e00' lub WCHAR b [] = L "Chiński znak dla jednego to \ x4e00".
Powiązane problemy