繁体   English   中英

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

[英]Verbatim string containing “#” recognized as a preprocessor directive

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

如果定义了DEBUG,则以上代码将使用Visual Studio 2017正确构建。

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

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

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

我可以通过使用非普通字符串来解决此问题:

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

在我的特定用例中,我宁愿保持原样。 是否有其他(可能更好)的方法来解决此问题?

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

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

#if DEBUG

    Var sb = new StringBuilder();

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

#endif

如果您无法通过,那就四处走走。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM