2009-11-25 5 views
0

Я разрежу погоню. У меня есть два вопроса о том, что простой, но я не могу понять их.C# switch statement вопрос

Первое:

В C# заявлении переключателя, делать заявления случае должны быть последовательными (с Интсами)?

Например:

switch(someInt) 
{ 
    case 1 
    // some code 
    case 2 
    // some code 
    case 3 
    // some code 
} 

или это можно сделать что-то вроде следующего:

switch(someInt) 
{ 
    case 1 
    case 3 
    case 5 
} 

Я знаю, что нормально, если-иначе заявления используются для чего-то в этом роде, но я Мне просто интересно узнать, возможно ли это.

Кроме того, считаются ли магические числа действительными числами в операциях case? Или лучше применять декларации констант для использования в заявлениях о делах?

Спасибо!

Edit:

Спасибо всем вам за ваши ответы! Я ценю это.

+0

Как хорошая академическая работа, я бы посоветовал вам загрузить рефлектор и посмотреть, с чем скомпилированы ваши инструкции switch. – Josh

ответ

0

Значения аргументов case определенно не обязательно должны быть последовательными.

Вы также не привязаны только к целочисленным значениям. Строки работают так же хорошо.

Если вы беспокоитесь о магических числах, лучше всего создать перечисление. Он передаст значение этих магических чисел. В противном случае, имейте это и наслаждайтесь.

0

Они не обязательно должны быть последовательными. Хотя я делаю это только ради ясности.

1

Они могут быть в любом порядке. И нет, не всегда плохо использовать фактические цифры. Но не магические числа. Используйте номера, если вы сравниваете в int, как возможно

switch (numberOfItems) 
{ 
    case 0: 
     break; 
    case 1: 
     break; 
    default: 
     break; 
} 

(Конечно, это всего лишь пример, и я не могу себе представить, видя этот код в реальном мире)

0

Порядок не имеет значения, компилятор выполнит эту работу для вас.

Я предпочитаю использовать перечисление или константу int, чтобы указать значение числа, особенно когда оно поддерживается кем-то еще по дороге.

+0

Зависит от цели данного номера. Например, я включил подсчеты раньше. Мне действительно нужно перечисление здесь? –

0

Это возможно. Синтаксис таков: (вы близки)

switch(someInt) 
{ 
    case 1: 
    // some code 
    break; 

    case 2: 
    // some code 
    break; 

    case 3: 
    // some code 
    break; 

    default: 
    // code for "else" case 
    break; 
} 
or is it possible to do something like the following: 

switch(someInt) 
{ 
    case 1: 
    case 3: 
    case 5: 
    // some code 
    break; 
} 

Примечание двоеточие и break s.

Что касается использования магических чисел, в общем, я предпочитаю помещать литералы в константы, но я делаю исключения для ярко выраженных чисел, таких как наименьшее число для проверки делимости коэффициента, равно 2.

+0

Получил мой значок! Спасибо за понижение! : D –

0

В качестве небольшой оптимизации вы можете заказать свои значения на основе фактической/ожидаемой частоты. Я также добавлю «дефолтный» случай, чтобы вы могли легко обнаружить, где вы использовали свое перечисление, и забыли его учесть. Это еще одна причина использования значений enum над константами.

+0

Я думал, что для ints все ветвления были постоянными, независимо от порядка. У меня нет источника, но кто-нибудь знает наверняка? – recursive