42


0

C#のHeredoc文字列

C#の文字列には、できれば_anything_(逐語的な文字列の癖である二重引用符を含む)をエスケープする必要のない、ヒアドキュメント表記法がありますか?

4 Answer


57


他の人が言ったように、ありません。

個人的に私は最初の場所でそれらを作成することを避けます-私は代わりに埋め込みリソースを使用します。 それらは非常に扱いやすく、名前付き埋め込みリソースを呼び出し元アセンブリから文字列として読み込むユーティリティメソッドがある場合(おそらくUTF-8エンコードを想定)、次のことを意味します。

  • 埋め込みドキュメントがSQL、XSLT、HTMLなどの場合は、 本当にSQL(など)ファイルになるので、構文の強調表示を取得します。

  • _any_のエスケープについて心配する必要はありません

  • ドキュメントをインデントすることや作成することを心配する必要はありません。 あなたのC#コードは見苦しい

  • 関連する場合は、ファイルを「通常の」方法で使用できます(例: view HTMLページとして)

  • データはコードから分離されています


38


それはHEREDOCをサポートしていませんが、Verbatim文字列を使用して次のようなことを行うことができます。

string miniTemplate = @"

  Hello ""{0}"",

  Your friend {1} sent you this message:

     {2}

  That's all!";

string populatedTemplate = String.Format(miniTemplate, "Fred", "Jack", "HelloWorld!");

System.Console.WriteLine(populatedTemplate);

スナッグ元:http://blog.luckyus.net/2009/02/03/heredoc-in-c-sharp/


9


いいえ、C#には「HEREDOC」スタイルの文字列リテラルはありません。

C#には、2種類の文字列リテラルのみがあります。

  • _Regular_リテラル、多くのエスケープシーケンスが必要

  • _Verbatim_リテラル、 @ -quoted:ダブルクォートはエスケープする必要があります 倍増

参考文献


0


異なるプログラミング言語で利用可能な* Heredoc *の同等物の良いリファレンスは、https://rosettacode.org/wiki/Here_document#C.23 [Rosettacode Wiki]にあります。