包含“#”的逐字字符串被识别为预处理程序指令

时间:2018-02-12 09:07:22

标签: c# preprocessor verbatim-string

#if DEBUG
    string s = @"
# text";
#endif

如果定义了DEBUG,则使用Visual Studio 2017构建上述代码时没有错误。

如果未定义DEBUG,则构建将失败,并显示以下错误:

  

错误CS1024:预期的预处理程序指令

已向C#语言设计社区here报告此问题。

我可以使用非逐字字符串解决问题:

#if DEBUG
    string s = "\n" +
"# text";
#endif

在我的特定用例中,我宁愿保持字符串逐字。 有没有 - 可能更好 - 解决这个问题的方法?

2 个答案:

答案 0 :(得分:1)

显然没有办法避免这个问题,除非它是你的VS.

但是如果它给你带来问题你可以尝试使用StringBuilder,它可能会给你一个更一致的外观

#if DEBUG

    Var sb = new StringBuilder();

    S.AppendLine("rah");
    S.AppendLine("");
    S.AppendLine("# Text");
    S.AppendLine("# Blah");

#endif

答案 1 :(得分:1)

如果你无法通过,那就去吧。

const string shellScript = @"
# text";
#if DEBUG
    string s = shellScript;
#endif

编译器不会警告未使用的常量,也不会(我希望)任何过度热衷的静态分析器。作为额外的好处(?),您可以解释逐字字符串实际代表的内容。