编译器无法识别为真的最简单的“真实”值

时间:2017-06-01 15:31:17

标签: c# if-statement compiler-warnings

我有一个调试拦截说

if (true)
    throw new Exception()
DoStuff();

然而,编译器警告我DoStuff()是无法访问的代码。以下是:

if (1==1)
if (1 + 1 == 2)

以下'作品'

int x = 1;
if (2 * x == 2)
    throw...

什么表达对人类来说显然是真的,而对编译器却没有?我能管理的最好的是

bool False =>false;
if (False)

...它有一个很好的属性,关闭它所有我必须做的是将它改为

bool False=>true  /*  :D)     */

1 个答案:

答案 0 :(得分:1)

无需弄乱你的代码,你可以这样做:

[System.Diagnostics.Conditional("DEBUG")]
void stop() { throw new Exception(); }

要使Debug中存在但在Release中不存在的方法,通常使用:

void MyMethod()
{
    stop(); // If you're in Release, this invocation will be removed
    DoStuff();
}

我在代码片段中一直这样做,我的方法遵循命名约定DebugConditional_CopyPasteOfContainerName()