2017-06-01 47 views
-3

值我有一个小的调试截距说最简单的“真”,编译器无法识别为真

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)  */ 
+2

您所看到的常量表达式的分析,是不是常量表达式的分析之间的差异我的方法。如果这是C#,分析会假设'x'在进行流分析时可能包含任何有效的int值。 ('bool False => true'可能会让你被捕) –

+1

这听起来像是你应该让编译器警告你的情况。谁在乎?无论如何,你正在做一些奇怪的事情。 –

+0

您应该检查[Debug](https://msdn.microsoft.com/en-us/library/system.diagnostics.debug(v = vs.110).aspx)类和跟踪开关。 .NET允许你从1.0版本开始基于构建类型和条件。谦虚的'Debug.Assert(false)'在Debug上断开,但在发布版本上被删除 –

回答

1

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

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

要具有它存在于DebugRelease不存在的方法,通常使用:

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

我做这一切的时候,我的代码段,用以下的命名约定DebugConditional_CopyPasteOfContainerName()

+0

'Debug.Assert(false);'? –

+0

@PanagiotisKanavos我从来没有用过,很高兴知道。 – Alex