Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理开关语句_C#_Return_Design By Contract_Switch Statement - Fatal编程技术网

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;
用更少的代码说明了这一点。