Оператор переключателя - PullRequest
0 голосов
/ 24 ноября 2011

Какой предпочтительный способ обработки следующего случая:

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, но, вероятно, есть лучшее решение.

Ответы [ 3 ]

8 голосов
/ 24 ноября 2011

Я предпочитаю выдавать исключение за пределами допустимого диапазона в случае default, если ожидается, что приложение поддержит контракт 1..4.Исключение отражает ожидание вызывающего абонента, что он даст мне хорошие данные.

Если ваш компилятор не может понять, что default решает не все пути кода , тогда поместитеreturn после switch.Но компилятор c # все сделает правильно.

0 голосов
/ 24 ноября 2011

Я бы, наверное, сделал что-то подобное.

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 голосов
/ 24 ноября 2011

default: return error_code будет моим решением.

...