web-dev-qa-db-ja.com

二重引用符を文字列でエスケープする

二重引用符は次のようにエスケープすることができます。

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

しかしこれは文字列に文字"を追加することを含みます。文字列を変更する必要がないように、二重引用符をエスケープするC#関数または他の方法はありますか。

129
Mudassir Hasan

いいえ.

そのままの文字列リテラルを使用するか、バックスラッシュを使用して"をエスケープします。

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

どちらの場合も文字列は変更されていません - 単一のエスケープ"があります。これは、文字が文字列の一部であり、文字列の終端文字ではないことをC#に伝えるための単なる方法です。

176
Oded

どちらの方法でもバックスラッシュを使用できます。

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 です。

"はまだあなたの文字列の一部です。

MSDNから Escape SequencesString literals を調べてください。

57
Soner Gönül

C#では、バックスラッシュを使って文字列に特殊文字を付けることができます。例えば、「」を書くには、「」と書く必要があります。あなたがバックスラッシュを使って書く多くの文字があります:バックスラッシュと数字:

  • \ 000 null
  • \ 010バックスペース
  • \ 011横タブ
  • \ 012改行
  • \ 015キャリッジリターン
  • \ 032代用
  • 二重引用符
  • 一重引用符
  • \ 134バックスラッシュ
  • \ 140グレーブアクセント

他の文字とバックスラッシュ

  • ベル(警告)
  • \ bバックスペース
  • \ f用紙送り
  • \ n改行
  • キャリッジリターン
  • \ t水平タブ
  • \ v垂直タブ
  • シングルクォーテーションマーク
  • 二重引用符
  • \バックスラッシュ
  • \?文字の疑問符
  • 8進数表記の\ ooo ASCII文字
  • 16進表記の\ x hh ASCII文字
  • \ x hhhhこのエスケープシーケンスがワイド文字定数またはUnicode文字列リテラルで使用されている場合は、16進表記のUnicode文字。例えば、WCHAR f = L '\ x4e00'またはWCHAR b [] = L "1つの漢字は\ x4e00"です。
16

あなたは誤解して逃げています。

余分な"文字は文字列リテラルの一部です。それらは、コンパイラによってsingle"として解釈されます。

あなたが実行時にそれを印刷するかどうかがわかるでしょう、あなたの文字列の実際の値はまだHe said to me , "Hello World".How are you ?です。

6
SLaks

あなたの問題を説明してください。あなたは言う:

しかしこれは文字列に文字 ""を追加することを含みます。

それはどんな問題ですか? string foo = "Foo"bar"";と入力することはできません。コンパイルエラーが発生するためです。 追加の部分に関しては、文字列サイズの用語ではそれは正しくありません:

@"""".Length == "\"".Length == 1
5
CodeCaster