49

私はC#に少し慣れていません。この時点で立ち往生しています。エスケープするために使用した通常の文字列があります。ここ\"エスケープすることは、コンパイラの解釈をエスケープし、画面に出力することを意味します。期待される出力を得る -->""

class Program
{
    static void Main(string[] args)
    {
        string s1 = "This is a \"regular\" string";
        System.Console.WriteLine(s1);
        System.Console.Read();
    }
}

o/p--> これは「通常の」文字列です

今、私は逐語的な文字列を持っており、上記と同じ方法でエスケープしようとしています..-- ">\

class Program
{
    static void Main(string[] args)
    {
        string s2 = @"This is \t a \"verbatim\" string";//this would escape \t
        System.Console.WriteLine(s2);
        System.Console.Read();
    }
}

上記が機能しないのはなぜですか?

4

3 に答える 3

63

二重引用符を使用します。

 string s2 = @"This is \t a ""verbatim"" string";
于 2013-06-18T12:34:16.180 に答える
14

二重引用符を含む逐語的な文字列を書きたい場合は、2 つの二重引用符を書かなければなりません。

string s2 = @"This is \t a ""verbatim"" string";

ここに画像の説明を入力

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

2.4.4.5 文字列リテラル

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

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

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

于 2013-06-18T12:33:44.653 に答える
4

Verbatim 文字列では、バックスラッシュはエスケープ文字ではなく標準文字として扱われます。エスケープが必要な唯一の文字は引用符で、まったく同じ文字を使用してエスケープできます。

string s2 = @"This is \t a ""verbatim"" string";

もちろん\t、このメソッドを使用して (タブ) のような特殊文字を追加することはできないため、単純な文字列にのみ役立ちます。これは、ファイル パスを操作する場合にのみ使用すると思います。

于 2013-06-18T12:35:40.627 に答える