-2

文字列から取り除きたいこの部分文字列があります:

<ArrayOfSiteQuery xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://schemas.datacontract.org/2004/07/CStore.DomainModels.HHS">

それがファンキーに満ちていることに気づいたので、それを逐語的に表現することですべての問題が解決すると思いました。

String messedUpJunk = @"<ArrayOfSiteQuery xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://schemas.datacontract.org/2004/07/CStore.DomainModels.HHS">";

...しかし、Lost In Space のロボットを言い換えると、それは計算 (コンパイル) しません。最初の「http」で「; expected 」が表示されます。

引用符をエスケープすることでコンパイル可能にできます:

String messedUpJunk = "<ArrayOfSiteQuery xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/CStore.DomainModels.HHS\">";

...しかし、逐語的でなければ、逐語的であることに何の意味があるでしょうか?

4

2 に答える 2

6

二重引用符は、逐語的な文字列でエスケープする必要がある唯一の文字です。""バックスラッシュを使用する代わりに、二重にする必要があります ( )。

String messedUpJunk = @"<ArrayOfSiteQuery xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" 
xmlns=""http://schemas.datacontract.org/2004/07/CStore.DomainModels.HHS"">";

MSDN リンク:

二重引用符を使用して、逐語的な文字列内に引用符を埋め込みます

于 2015-01-07T19:38:05.550 に答える
3

バックスラッシュなど、エスケープする必要のない残りの文字については、(二重二重引用符を使用して)エスケープする必要があるのは二重引用符\です。

参照: 2.4.4.5 文字列リテラル - C#

逐語的な文字列リテラルは、@ 文字とそれに続く二重引用符、0 個以上の文字、および終了二重引用符文字で構成されます。簡単な例は @"hello" です。逐語的な文字列リテラルでは、デリミタ間の文字は逐語的に解釈されますが、唯一の例外は引用符エスケープ シーケンスです。特に、単純なエスケープ シーケンス、および 16 進数と Unicode のエスケープ シーケンスは、逐語的な文字列リテラルでは処理されません。逐語的な文字列リテラルは、複数の行にまたがることがあります。

二重引用符をエスケープする必要がある理由は、逐語的か通常かにかかわらず、文字列の開始と終了を表すためです。

于 2015-01-07T19:39:02.100 に答える