C# 包含“的逐字记录字符串”#&引用;被识别为预处理器指令

C# 包含“的逐字记录字符串”#&引用;被识别为预处理器指令,c#,preprocessor,verbatim-string,C#,Preprocessor,Verbatim String,如果定义了调试,则使用Visual Studio 2017生成上述代码时不会出错 如果未定义调试,则生成将失败,并出现以下错误: 错误CS1024:需要预处理器指令 这个问题已经向C语言设计社区报告 我可以通过使用非逐字字符串来解决此问题: #if DEBUG string s = @" # text"; #endif 在我的特定用例中,我宁愿保持字符串的逐字记录。 有没有一种可能更好的方法来解决这个问题?显然没有办法避免这个问题,除非可能是你的VS 但是,如果它给您带来问题,您可以尝

如果定义了调试,则使用Visual Studio 2017生成上述代码时不会出错

如果未定义调试,则生成将失败,并出现以下错误:

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

这个问题已经向C语言设计社区报告

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

#if DEBUG
    string s = @"
# text";
#endif
在我的特定用例中,我宁愿保持字符串的逐字记录。
有没有一种可能更好的方法来解决这个问题?

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

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

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

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

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

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

如果你不能通过,那就绕过去

#if DEBUG

    Var sb = new StringBuilder();

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

#endif

编译器不会警告未使用的常量,也不会(我希望)警告任何过于热心的静态分析器。作为一个额外的好处(?)你可以解释逐字记录字符串实际上代表了什么。

如果你看不懂,那就四处看看

#if DEBUG

    Var sb = new StringBuilder();

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

#endif

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

谢谢。把绳子分成几行确实是个好主意。我已编辑了我的问题,以显示使用字符串文字串联的替代解决方案,每个字符串文字以
结尾\n“+
。但是,我不认为引入StringBuilder比串字面值的串联有什么好处。谢谢。把绳子分成几行确实是个好主意。我已编辑了我的问题,以显示使用字符串文字串联的替代解决方案,每个字符串文字以
结尾\n“+
。然而,我不认为引入StringBuilder比串字面值的串联有什么好处。在我的实际用例中,
#if DEBUG
的范围要大得多:它包含包含串字面值的方法和包含该方法的类。为了使您的想法生效,我必须定义一个新类来包含string变量,这意味着string文本最终将远离使用它的地方。我宁愿不那样做。但我相信其他读者会发现这个答案很有用。@ZunTzu:在这种情况下,另一个选项是通过项目配置排除整个文件,并带有一个条件(
condition=“$(configuration)”==“Debug”“
)。当然,与预处理器指令相比,随意处理项目文件的直观性要低得多。这与我最初的问题并不相关,但与我试图实现的目标非常相关。对我来说,重点是避免发布单元测试(是的,我的单元测试和我的生产代码在同一个项目中,我喜欢这样)。我会试试你的主意!非常感谢@ZunTzu:在这种情况下,您可以将所有单元测试文件分组到它们自己的
中,并对其应用条件。当然,一个单独的项目更干净,但您已经偏离了常规路线。:-)在我的实际用例中,
#if DEBUG
的范围要大得多:它包含包含字符串文本的方法和包含该方法的类。为了使您的想法生效,我必须定义一个新类来包含string变量,这意味着string文本最终将远离使用它的地方。我宁愿不那样做。但我相信其他读者会发现这个答案很有用。@ZunTzu:在这种情况下,另一个选项是通过项目配置排除整个文件,并带有一个条件(
condition=“$(configuration)”==“Debug”“
)。当然,与预处理器指令相比,随意处理项目文件的直观性要低得多。这与我最初的问题并不相关,但与我试图实现的目标非常相关。对我来说,重点是避免发布单元测试(是的,我的单元测试和我的生产代码在同一个项目中,我喜欢这样)。我会试试你的主意!非常感谢@ZunTzu:在这种情况下,您可以将所有单元测试文件分组到它们自己的
中,并对其应用条件。当然,一个单独的项目更干净,但您已经偏离了常规路线。:-)