2017-06-01 51 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