2014-05-14 152 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'然后。 –