跳至主要内容

non_exhaustive_switch_statement

由于未匹配到 '{1}',类型 '{0}' 未被 switch 语句完整覆盖。

描述

#

当一个 switch 语句针对一个可穷尽类型,但缺少匹配其可能值的某个或多个 case 时,分析器会生成此诊断信息。

示例

#

以下代码会生成此诊断信息,因为 switch 语句缺少针对值 E.three 的 case,并且 E 是一个可穷尽类型

dart
enum E { one, two, three }

void f(E e) {
  switch (e) {
    case E.one:
    case E.two:
  }
}

常见修复方法

#

为当前未匹配的每个常量添加一个 case

dart
enum E { one, two, three }

void f(E e) {
  switch (e) {
    case E.one:
    case E.two:
      break;
    case E.three:
  }
}

如果不需要匹配这些缺失的值,则添加一个 default 子句或一个通配符模式

dart
enum E { one, two, three }

void f(E e) {
  switch (e) {
    case E.one:
    case E.two:
      break;
    default:
  }
}

但请注意,添加 default 子句或通配符模式将导致此可穷尽类型的任何未来值也得到处理,因此您将失去编译器在 switch 需要更新时发出警告的能力。