Оператор Switch без значения по умолчанию при работе с перечислениямиC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Гость
 Оператор Switch без значения по умолчанию при работе с перечислениями

Сообщение Гость »

Это моя любимая неприятность с тех пор, как я начал использовать .NET, но мне было любопытно, не упустил ли я что-то. Мой фрагмент кода не скомпилируется (пожалуйста, простите за вынужденный характер примера), потому что (по мнению компилятора) отсутствует оператор возврата:

Код: Выделить всё

public enum Decision { Yes, No}

public class Test
{
public string GetDecision(Decision decision)
{
switch (decision)
{
case Decision.Yes:
return "Yes, that's my decision";
case Decision.No:
return "No, that's my decision";

}
}
}
Теперь я знаю, что могу просто разместить оператор по умолчанию, чтобы избавиться от предупреждения компилятора, но, на мой взгляд, это не только избыточный код, но и опасный код. Если бы перечисление было в другом файле, и другой разработчик пришел бы и добавил Maybe к моему перечислению, это было бы обработано моим предложением по умолчанию, которое ничего не знает о Maybe, и это действительно хороший шанс, что мы вносим логическую ошибку.

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

Для меня это настолько в корне неправильно, что я хочу знать, просто ли это что-то, чего мне не хватает, или у нас просто есть быть очень осторожными, когда мы используем перечисления в операторах переключения?

РЕДАКТИРОВАТЬ:
Я знаю, что могу вызывать исключения в стандартном или добавить возврат за пределами переключателя, но это все равно, по сути, хаки, позволяющие обойти ошибку компилятора, которая не должна быть ошибкой.

Что касается перечисления, на самом деле это просто int, это один из маленьких грязных секретов .NET, который на самом деле очень смущает. Позвольте мне объявить перечисление с конечным числом возможностей и дать мне компиляцию для:

Код: Выделить всё

Decision fred = (Decision)123;
а затем выдать исключение, если кто-то попытается сделать что-то вроде:

Код: Выделить всё

int foo = 123;
Decision fred = (Decision)foo;
РЕДАКТИРОВАНИЕ 2:

Несколько человек оставили комментарии о том, что происходит, когда перечисление находится в другой сборке, и как это может привести к проблемам. Я хочу сказать, что именно такое поведение, по моему мнению, и должно произойти. Если я изменю сигнатуру метода, это приведет к проблемам, я предполагаю, что изменение перечисления должно быть таким же. У меня такое впечатление, что многие люди думают, что я ничего не понимаю в перечислениях в .NET. Я просто думаю, что такое поведение неправильное, и я надеялся, что кто-то мог знать о какой-то очень малоизвестной функции, которая изменила бы мое мнение о перечислениях .NET.

Подробнее здесь: https://stackoverflow.com/questions/109 ... umerations
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Установка значения по умолчанию Livewire Switch на ON
    Anonymous » » в форуме Php
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Почему оператор switch нельзя применить к строкам?
    Anonymous » » в форуме C++
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Оператор Switch не работает с моими объектами списка
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Мой оператор Switch завершается, хотя он должен сканировать ввод пользователя
    Anonymous » » в форуме JAVA
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Оператор Java Switch Многие случаи упрощенные
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»