带有枚举的 dart switch case 中缺少 case 子句错误

Nee*_*raj 5 enums switch-statement dart flutter

我为枚举编写了这个简单的开关案例:

\n\n
enum Operation {\n  CREATE,\n  UPDATE,\n  DELETE,\n  READ\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

...

\n\n
void check(Operation op) {\n    switch(op) { // dart complains here\n      case Operation.CREATE:\n        insert();\n        break;\n      case Operation.UPDATE:\n        update();\n        break;\n      case Operation.DELETE:\n        delete();\n        break;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

它在该行抱怨此错误switch(op)

\n\n
\n

错误:缺少“READ”的 case 子句。
\n 尝试为缺少的常量添加 case 子句,或添加默认常量。

\n
\n\n

如果我按照建议添加一个READ或多个案例,它就会得到修复default
\n但我的问题是:为什么会这样?为什么我不能遗漏一个案例?如果我不想在这里检查该案例怎么办?我检查了dart 语言文档,上面写着:

\n\n
\n

您可以在 switch 语句中使用枚举,如果您不处理所有 enum\xe2\x80\x99s 值,\xe2\x80\x99 将收到警告

\n
\n\n

但就我而言,这绝对是一个错误而不是警告。 \n我正在使用 dart 来开发 flutter 应用程序(如果这有什么不同的话)。

\n

Ovi*_*diu 5

这样您就被迫显式处理所有用例,从而减少错误。您需要添加一个default相当于“当 null 或任何意外的枚举值”的值,或者显式列出所有剩余的枚举值。

最好的例子是,当您在创建该枚举几个月后向现有枚举添加新值时,然后您无法编译应用程序,直到将该新值添加到该类型的所有 switch case 中(除非它们在这种情况下default使用它们已经被处理了)。