Unikaj podwójnych cudzysłowów w ciągu znaków

173

Podwójne cudzysłowy można zmienić w następujący sposób:

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

Ale wymaga to dodania znaku "do ciągu. Czy istnieje funkcja C # lub inna metoda umożliwiająca unikanie podwójnych cudzysłowów, aby nie była wymagana żadna zmiana w ciągu?

Mudassir Hasan
źródło
5
możesz użyć „Hello World” w ten sposób
Pandian
1
Czego tak naprawdę chcesz w rezultacie? „staje się” w dosłownym ciągu
Roel
Podobne pytanie dla C / C ++ (ponieważ może to być najpopularniejszy hit w wyszukiwarce): Jak mogę umieścić podwójne cudzysłowy w literale ciągu?
Peter Mortensen

Odpowiedzi:

226

Nie.

Albo użyj dosłownych literałów łańcuchowych, jak masz, lub "użyj odwrotnego ukośnika.

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

Ciąg nie zmienił się w żadnym przypadku - jest w nim pojedynczy znak ucieczki " . Jest to tylko sposób, aby powiedzieć C #, że znak jest częścią ciągu, a nie terminatorem ciągu.

Oded
źródło
81

Możesz użyć odwrotnego ukośnika w obie strony;

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

Drukuje;

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

który jest dokładnie tym samym drukiem z;

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

Oto plik DEMO.

" jest nadal częścią twojego ciągu.

Sprawdź Escape Sequencesi String literalsod MSDN.

Soner Gönül
źródło
18

W C # możesz użyć ukośnika odwrotnego, aby umieścić znaki specjalne w ciągu. Na przykład, aby wstawić „, musisz wpisać \”. Jest wiele znaków, które piszesz za pomocą ukośnika odwrotnego: Ukośnik odwrotny z liczbą:

  • \ 000 null
  • \ 010 backspace
  • \ 011 tabulator poziomy
  • \ 012 nowa linia
  • \ 015 powrót karetki
  • \ 032 substytut
  • \ 042 podwójny cudzysłów
  • \ 047 pojedynczy cudzysłów
  • \ 134 odwrotny ukośnik
  • \ 140 słaby akcent

Ukośnik odwrotny z innym znakiem

  • \ a Bell (alert)
  • \ b Backspace
  • \ f Formfeed
  • \ n Nowa linia
  • \ r Powrót karetki
  • \ t Zakładka pozioma
  • \ v Zakładka pionowa
  • \ 'Pojedynczy cudzysłów
  • \ "Podwójny cudzysłów
  • \ Ukośnik wsteczny
  • \? Dosłowny znak zapytania
  • \ ooo Znak ASCII w notacji ósemkowej
  • \ x hh Znak ASCII w notacji szesnastkowej
  • \ x hhhh Znak Unicode w notacji szesnastkowej, jeśli ta sekwencja ucieczki jest używana w stałej szerokoznakowej lub literale ciągu Unicode. Na przykład WCHAR f = L '\ x4e00' lub WCHAR b [] = L "Chiński znak oznaczający jeden to \ x4e00".
Daniel Antokoletz
źródło
6

Uciekasz za nieporozumienie.

Dodatkowe "znaki są częścią literału ciągu; są interpretowane przez kompilator jako pojedyncze " .

Rzeczywista wartość twojego ciągu jest nadal He said to me , "Hello World".How are you ?, co zobaczysz, jeśli drukujesz go w czasie wykonywania.

SLaks
źródło
4

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

Ale wymaga to dodania znaku "do ciągu.

Jaki to problem? Nie możesz pisać string foo = "Foo"bar"";, ponieważ spowoduje to błąd kompilacji. Jeśli chodzi o część dodającą , w kategoriach rozmiaru łańcucha, która nie jest prawdą:

@"""".Length == "\"".Length == 1
CodeCaster
źródło