1

C# を使用して 2 つの文字列をエスケープ シーケンスで連結しています。スキップしたいので、各文字列の前に @ 記号を使用しています。次のようになります。

string firstString = @"Use \n for line break. ";
string secondString = @"Use \b for backspace";
return firstString + secondString;

問題は、返される値でエスケープ シーケンスがスキップされるかどうかです。

4

4 に答える 4

2

他の答えはもちろん正しいです。明確にするために。

これは、C# 仕様のセクション 2.4.4.5 でカバーされています。

2.4.4.5 文字列リテラル

C# では、通常の文字列リテラルと逐語的な文字列リテラルの 2 つの形式の文字列リテラルがサポートされています。

通常の文字列リテラルは、"hello" のように二重引用符で囲まれた 0 個以上の文字で構成され、単純なエスケープ シーケンス (タブ文字の \t など) と 16 進数および Unicode エスケープ シーケンスの両方を含めることができます。

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

したがって、動詞文字列リテラルのように使用すると;

string firstString = @"Use \n for line break. ";
string secondString = @"Use \b for backspace";
returns firstString + secondString; 

結果は次のようになります。

Use \n for line break. Use \b for backspace

次のような通常の文字列リテラルを使用する場合。

string firstString = "Use \n for line break. ";
string secondString = "Use \b for backspace";
returns firstString + secondString; 

結果は次のようになります。

Use
 for line break. Use for backspace

\nは改行エスケープ シーケンスであり、\bバックスペース エスケープ シーケンスであるためです。すべてのリストについては、以下をご覧ください。

于 2013-11-07T09:45:19.840 に答える
0

firstString + secondStringへのショートカットですString.Concat(firstString, secondString)

このConcat()メソッドは、2 つの文字列をそのまま連結するだけです。それらのコンテンツは解釈されません。したがって、バックスラッシュ文字はそこに残ります。

于 2013-11-07T09:51:15.263 に答える