Ошибка в условии пропущенного регистра в случае переключателя дротиков с перечислениями - PullRequest
0 голосов
/ 29 февраля 2020

Я написал этот простой случай переключения для перечисления:

enum Operation {
  CREATE,
  UPDATE,
  DELETE,
  READ
}

...

void check(Operation op) {
    switch(op) { // dart complains here
      case Operation.CREATE:
        insert();
        break;
      case Operation.UPDATE:
        update();
        break;
      case Operation.DELETE:
        delete();
        break;
}

, который жалуется на эту ошибку в строке switch(op):

ошибка: отсутствует условие case для READ. Попробуйте добавить предложение case для отсутствующей константы или добавить константу по умолчанию.

Исправится, если я последую предложению и добавлю регистр READ или регистр default. Но мой вопрос: почему это так? Почему я не могу пропустить дело? Что если я не хочу проверять это дело здесь? Я проверил dart language docs , который говорит:

Вы можете использовать перечисления в выражениях switch, и вы получите предупреждение, если вы не обработаете все значения перечисления

Но в моем случае это определенно ошибка, а не предупреждение. Я использую dart для разработки флаттера (если это имеет значение).

1 Ответ

0 голосов
/ 01 марта 2020

Это так, что вы вынуждены явно обрабатывать все варианты использования, что приведет к уменьшению количества ошибок. Вам нужно будет либо добавить default, который является эквивалентом 'when null, либо любое неожиданное значение enum', либо явно перечислить все оставшиеся значения enum.

Лучший пример - это когда вы добавляете новое значение в существующее перечисление, спустя несколько месяцев после создания этого перечисления, и затем вы не сможете скомпилировать приложение, пока не добавите это новое значение во все случаи переключения этого типа (если только они не использовали default, в этом случае они уже обработаны).

...