2011-11-24 92 views
0

什么是处理下列情况下的首选方式:处理switch语句

switch (numberOfActualBytes) 
{ 
    case 1: return something1; 
    case 2: return something2; 
    case 3: return something3; 
    case 4: return something4; 
} 

我肯定知道numberOfActualBytes由于合同使用在范围内1-4

如何编写不会导致not all code paths return a value错误的代码?


我怀疑我应该在这个函数结束或default switch case抛出一些异常,但有可能是一个更好的解决方案。

回答

8

如果预计应用程序可以支持1..4合同,那么我更喜欢在default的情况下抛出超出范围的异常。这个例外反映了呼叫方的期望,他们会给我很好的数据。

如果你的编译想不通的是,default情况下解决不是所有的代码路径,然后把returnswitch后。但是C#编译器将会正确。

0

default: return error_code将是我的解决方案。

0

我可能会这样做。

declare temp_something = a default value; //Used to check for error. 

switch (numberOfActualBytes) 
{ 
    case 1: temp_something = something1; break; 
    case 2: temp_something = something2; break; 
    case 3: temp_something = something3; break; 
    case 4: temp_something = something4; break; 
} 
return temp_something; 

这难道不是这样吗?

+0

当然,但它掩盖的事实是,除1-4之外的任何内容都违反了函数的语义。 – drdwilcox

+0

Hhhhmm。在这种情况下,如果应该检查超出范围的异常,那么在交换机之前的if结构将减少通过交换机的开销。 if(!((0 Ajai

+0

一点也不。这样做会掩盖switch语句,imo。简单的'default:throw exception;'说代码少得多。 – drdwilcox