跳至主要內容

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 需要更新時發出警告的能力。