C# #如果调试和返回语句-无法访问代码警告

C# #如果调试和返回语句-无法访问代码警告,c#,visual-studio-2015,c-preprocessor,compiler-warnings,C#,Visual Studio 2015,C Preprocessor,Compiler Warnings,我面对的是一段小小的代码: #if DEBUG return thisVariable; #endif return thatVariable; //<-- warning CS0162 here #如果调试 返回此变量; #恩迪夫 返回该变量// 如果正在执行定义了调试符号的生成,则编译器将对代码执行静态分析,前提是第一次返回有效且未被排除。因此,您的代码将被视为: return thisVariable; return thatVariable; 在这种情况下,很明显在这样的构建中

我面对的是一段小小的代码:

#if DEBUG
return thisVariable;
#endif
return thatVariable; //<-- warning CS0162 here
#如果调试
返回此变量;
#恩迪夫

返回该变量// 如果正在执行定义了调试符号的生成,则编译器将对代码执行静态分析,前提是第一次返回有效且未被排除。因此,您的代码将被视为:

return thisVariable;
return thatVariable;
在这种情况下,很明显在这样的构建中不会到达第二个
return
语句。当切换到未定义调试的生成配置时,不应看到警告

考虑使用
#else
()以避免在定义调试时出现第二个
return
语句

还有以下相关的花絮:

虽然编译器没有单独的预处理器,但是 [C#预处理器指令]一节中描述的指令如下: 就像有一个一样处理


换句话说,C#编译器的静态分析不知道预处理器指令;此时它们已经被处理,静态分析只会看到预处理阶段产生的代码。

目前Visual Studio的解决方案配置是什么?当您将其放在Release中时,这将消失。在2°返回之前添加一个#else,在2°返回之后添加#endif,我们总是在调试模式下进行开发,并且仅在切换到公共版本的版本。将第二个return语句放在#else语句下,消除了警告,这是我一直在寻找的解决方案!非常感谢。在第二个return语句中使用#else并将#endif放在下面,可以删除警告。