2016-02-12 40 views
7

我面对这小小的一段代码:#如果DEBUG和返回语句 - 可达代码警告

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

它工作正常,但我得到的第二个return语句代码是不可到达的警告。尽管存在警告,但在释放模式下运行程序时,代码实际上非常容易到达。

为什么我会收到此警告?

+0

您目前在Visual Studio中有哪些解决方案配置? – Maarten

+0

当您将它放入发行版时,它将消失 –

+4

在2°返回之前添加#else并在 –

回答

13

如果您正在执行一个定义了DEBUG符号的版本,那么编译器正在对您的代码执行其静态分析,假设第一次返回有效并且未被排除。所以,你的代码将被视为:

return thisVariable; 
return thatVariable; 

在这种情况下,显然第二return语句不会在这样一个构造来达到。当您切换到DEBUG未定义的构建配置时,则不应该看到警告。

考虑在定义DEBUG时使用#elsedocs)来避免第二个return语句。

还有此相关珍闻从here

虽然编译器不具有单独的预处理器,在该[C#预处理器指令]部分中所描述的 指令是 处理,如同有一个。

换句话说,C#编译器的静态分析并不知道预处理器指令;他们已经在那个点处理过了,静态分析只能看到预处理阶段导致的代码。

+1

谢谢!使用#else作为第二个return语句,并将#endif放在它下面去掉警告。 – Richnau