让C#编译器不要因为某个调试常量在下一次运行中可能改变而发出警告
请看下面的类:
public class Foo
{
public const bool DebugThis = false;
public void Method()
{
if (DebugThis)
{
System.Console.WriteLine("Debugging..."); // compiler warning: "unreachable code detected"
// answers should not focus on the fact that this is a WriteLine. In genenral, there is some code that happens only if DebugThis is true.
}
}
}
有办法让这个警告沉默掉。对于我所知道的那些办法,我一个都不喜欢。
把#pragma放进去很笨拙,而且你得要有两个。
此外,在代码的不同位置可能会有多处DebugThis检查,这会导致#pragma的数量增加。
我通常不想禁用“检测到不可达代码”的警告。它有时是有用的。
我真正想做的是告诉编译器,在警告方面不把DebugThis的值考虑进来。仅就这个目的,它应该认为DebugThis可能为true也可能为false。
有办法做到吗?
解决方案
假设你确实需要按照问题标题来解决这个问题,一个选项是将DebugThis从编译时常量改为静态只读字段:
public static readonly bool DebugThis = false;
这可能会在某些情况下阻止一些编译器优化(例如省略不可达代码),但也会阻止该警告。(这也意味着该值是在运行时而非编译时确定的,这可能是个很好的事情——如果你有一个依赖于此的独立库,那么任何常量值都会被打包进该依赖库,即使在运行时使用的是本库的更新版本。)
然而,正如注释中所指出的,如果你的真正目标仅仅是确定记录多少,那么在日志框架中使用日志级别可能是更好的方法。(如果确实是为了调试,那么#if DEBUG会是合适的。)
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。