C# 处理开关语句
处理以下情况的首选方法是什么:C# 处理开关语句,c#,return,design-by-contract,switch-statement,C#,Return,Design By Contract,Switch Statement,处理以下情况的首选方法是什么: switch (numberOfActualBytes) { case 1: return something1; case 2: return something2; case 3: return something3; case 4: return something4; } 我可以肯定地知道,由于所使用的合同而产生的实际字节数在范围1-4内 如何编写不会导致并非所有代码路径都返回值的代码 我怀疑我应该在该函数末尾或在默认开
switch (numberOfActualBytes)
{
case 1: return something1;
case 2: return something2;
case 3: return something3;
case 4: return something4;
}
我可以肯定地知道,由于所使用的合同而产生的实际字节数在范围1-4
内
如何编写不会导致并非所有代码路径都返回值的代码
我怀疑我应该在该函数末尾或在默认开关情况下抛出一些异常,但是可能有更好的解决方案。default:returnerror\u code
将是我的解决方案。如果应用程序可以维护1..4合同,我更喜欢在default
情况下抛出超出范围的异常。异常反映了调用者的期望,即他们会给我好的数据
如果编译器无法确定default
案例解决的不是所有的代码路径,则将return
放在开关之后。但是c#编译器会把它做对的。我可能会这样做
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;
这不也是这样吗?当然,但它掩盖了一个事实,即除1-4之外的任何内容都违反了函数的语义。hhmm。在这种情况下,如果应该检查outofrange异常,那么交换机之前的if结构将减少通过交换机的开销<代码>如果(!((0default:throw exception;
用更少的代码说明了这一点。