【问题标题】:Heredoc strings in C#C# 中的 Heredoc 字符串
【发布时间】:2011-04-02 02:17:56
【问题描述】:

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

【问题讨论】:

    标签: c# string heredoc


    【解决方案1】:

    正如其他人所说,没有。

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

    • 如果您的嵌入文档是 SQL、XSLT、HTML 等,您将获得语法高亮显示,因为它真的会是一个 SQL (etc) 文件
    • 您无需担心 任何 转义
    • 您无需担心缩进文档或使 C# 代码看起来难看
    • 如果相关,您可以以“正常”方式使用该文件(例如,将其作为 HTML 页面查看)
    • 您的数据与您的代码是分开的

    【讨论】:

    • Mono 的人确实看过它,不过:tirania.org/blog/archive/2009/Dec-20.html
    • @MarcGravell:这是在谈论插值而不是不必逃避任何东西,不是吗?我只是快速浏览了一下,但我原以为这将意味着逃避更多,而不是更少......
    • 这是heredoc字符串的一个常见(虽然不是通用)特性,但是:是的,在很多情况下是双刃剑
    • nowdoc 语法也是如此?
    • @hanshenrik:在您发表评论之前,我从未听说过 nowdoc - 经过 30 秒的搜索,这听起来像是一种仅限 PHP 的语法。
    【解决方案2】:

    即使它不支持 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/

    【讨论】:

    【解决方案3】:

    不,C# 中没有“HEREDOC”样式的字符串文字。

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

    • 常规字面量,需要许多转义序列
    • 逐字逐句字面意思,@-quoted:双引号需要加倍转义

    参考文献

    【讨论】:

    • +1 “双引号需要通过加倍来转义”——这就是我想要的。
    猜你喜欢
    • 2014-10-04
    • 2011-11-26
    • 2013-06-09
    • 2019-11-21
    • 2019-04-07
    • 2020-12-01
    • 2020-02-24
    • 2022-12-22
    相关资源
    最近更新 更多