[英]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.