2014-05-14 201 views
0

標記代碼無法訪問的最佳方式是什麼,因此編譯器不會提供錯誤消息? 短例如:使代碼無法訪問

int x; 
if (y == 0) x = 1; 
else if (y == 1) x = 2; 

Console.WriteLine(x); 

我知道y可以是0或1,但C#將給出一個信息,即X desn't得到所有路徑的值。真正的代碼不是這個,但我想保持它更短。

拋出異常是一種很好的做法,還是有其他方法?

int x; 
if (y == 0) x = 1; 
else if (y == 1) x = 2; 
else throw new Exception(); 

Console.WriteLine(x); 
+0

您可以隨時使用Visual Studio的斷點功能。這是監控每行代碼狀態的最簡單方法。 – Xtian

+4

例外是爲了他們的聲音:異常。如果y不應該是0或1以外的任何值,那麼拋出一個新的ArgumentException。 – Kilazur

+0

你爲什麼要這樣做? – BenR

回答

6

我會去與拋出一個異常 - 它表明,世界是不是你所期望的狀態,你會更好戒菸你做任何損害:

if (y == 0) 
{ 
    x = 1; 
} 
else if (y == 1) 
{ 
    x = 2; 
} 
else 
{ 
    throw new IllegalStateException("y should be 0 or 1"); 
} 

或者,對於像這樣的簡單的情況下,使用開關/情況:

switch (y) 
{ 
    case 0: 
     x = 1; 
     break; 
    case 1: 
     x = 2; 
     break; 
    default: 
     throw new IllegalStateException("y should be 0 or 1"); 
} 

(如在評論所指出的,如果是y方法參數,然後ArgumentOutOfRangeException會更合適。或者如果y只是不是一個或零,因爲的一個參數值,那麼再次指出原因。如果基本上這是世界總體狀態被打破的問題,以上是合適的。)

+0

@Kilazur不幸的是,「凡人」都回答*非常*錯誤。我很高興Jon的答案在這裏出現,以避免OP的困境;) –

+0

y是一個局部變量,它與任何對象或調用者無關。這個例外永遠不會被拋出,因爲它只依賴於函數本身。當某些事情沒有按預期進行時,它會被拋出。 –

+0

@KocsisDávid:好吧,那聽起來像'IllegalStateException'然後。 –