#if 调试和返回语句 - 无法访问的代码警告

本文关键字:访问 代码 警告 调试 返回 语句 #if | 更新日期: 2023-09-27 18:34:24

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

#if DEBUG
return thisVariable;
#endif
return thatVariable; //<-- warning CS0162 here

它工作正常,除了我在第二个 return 语句上收到代码无法访问的警告。尽管有警告,但在发布模式下运行程序时,代码实际上非常容易访问。

为什么我会收到此警告?

#if 调试和返回语句 - 无法访问的代码警告

如果您正在执行定义了 DEBUG 符号的构建,则编译器正在对您的代码执行静态分析,假设第一次返回有效且未排除。因此,您的代码将被视为:

return thisVariable;
return thatVariable;

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

请考虑使用 #else (docs( 来避免在定义 DEBUG 时出现第二个 return 语句。

这里还有这个相关的花絮:

尽管编译器没有单独的预处理器,但 本 [C# 预处理器指令] 部分中描述的指令是 处理得好像有一个。

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