我面对这小小的一段代码:#如果DEBUG和返回语句 - 可达代码警告
#if DEBUG
return thisVariable;
#endif
return thatVariable; //<-- warning CS0162 here
它工作正常,但我得到的第二个return语句代码是不可到达的警告。尽管存在警告,但在释放模式下运行程序时,代码实际上非常容易到达。
为什么我会收到此警告?
我面对这小小的一段代码:#如果DEBUG和返回语句 - 可达代码警告
#if DEBUG
return thisVariable;
#endif
return thatVariable; //<-- warning CS0162 here
它工作正常,但我得到的第二个return语句代码是不可到达的警告。尽管存在警告,但在释放模式下运行程序时,代码实际上非常容易到达。
为什么我会收到此警告?
如果您正在执行一个定义了DEBUG符号的版本,那么编译器正在对您的代码执行其静态分析,假设第一次返回有效并且未被排除。所以,你的代码将被视为:
return thisVariable;
return thatVariable;
在这种情况下,显然第二return
语句不会在这样一个构造来达到。当您切换到DEBUG未定义的构建配置时,则不应该看到警告。
考虑在定义DEBUG时使用#else
(docs)来避免第二个return
语句。
还有此相关珍闻从here:
虽然编译器不具有单独的预处理器,在该[C#预处理器指令]部分中所描述的 指令是 处理,如同有一个。
换句话说,C#编译器的静态分析并不知道预处理器指令;他们已经在那个点处理过了,静态分析只能看到预处理阶段导致的代码。
谢谢!使用#else作为第二个return语句,并将#endif放在它下面去掉警告。 – Richnau
您目前在Visual Studio中有哪些解决方案配置? – Maarten
当您将它放入发行版时,它将消失 –
在2°返回之前添加#else并在 –