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

如果定义了 DEBUG,则上述代码使用 Visual Studio 2017 构建时不会出错。

如果未定义 DEBUG,则构建失败并出现以下错误:

错误 CS1024:需要预处理器指令

该问题已在此处报告给 C# 语言设计社区。

我可以通过使用非逐字字符串来解决这个问题:

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

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

4

2 回答 2

1

如果你不能通过,那就绕道而行。

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

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

于 2018-02-12T09:38:48.350 回答
1

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

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

#if DEBUG

    Var sb = new StringBuilder();

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

#endif
于 2018-02-12T09:12:05.130 回答