C#中的Heredoc字符串

Ail*_*lyn 44 c# string heredoc

在C#中是否有字符串的heredoc表示法,最好是我不必转义任何内容(包括双引号,这是逐字字符串中的怪癖)?

Jon*_*eet 58

正如其他人所说,没有.

我个人会首先避免创建它们 - 我会使用嵌入式资源.它们很容易使用,如果你有一个实用工具方法从调用程序集中加载一个命名的嵌入式资源作为一个字符串(可能假设UTF-8编码),它意味着:

  • 如果您的嵌入式文档类似于SQL,XSLT,HTML等,您将获得语法高亮,因为它确实一个SQL(等)文件
  • 您无需担心任何转义
  • 您无需担心缩进文档或使C#代码看起来很丑陋
  • 如果相关(例如将其视为HTML页面),您可以以"正常"方式使用该文件
  • 您的数据与代码分开


Bra*_*rks 42

即使它不支持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);
Run Code Online (Sandbox Code Playgroud)

来自:http://blog.luckyus.net/2009/02/03/heredoc-in-c-sharp/


Art*_*jev 13

2022 年 11 月更新:

C# 11开始,现在可以使用原始字符串文字

var longMessage = """
    This is a long message.
    Some "quoted text" here.
""";
Run Code Online (Sandbox Code Playgroud)


pol*_*nts 10

不,C#中没有"HEREDOC"样式字符串文字.

C#只有两种类型的字符串文字:

  • 常规文字,需要许多转义序列
  • Verbatim literal,@-quoted:doublequotes需要通过加倍来逃避

参考

  • +1"双引号需要通过加倍来逃避" - 这正是我所寻求的. (5认同)