跳到主要内容

non_exhaustive_switch_expression

类型 '{0}' 没有被 switch 的所有分支完整匹配,因为它没有匹配 '{1}'。

描述

#

当一个 switch 表达式缺少一个或多个可能的值的分支时,分析器会生成此诊断。

示例

#

以下代码会生成此诊断,因为 switch 表达式没有针对值 E.three 的分支。

dart
enum E { one, two, three }

String f(E e) => switch (e) {
    E.one => 'one',
    E.two => 'two',
  };

常见修复

#

如果缺少的值对于 switch 表达式具有明显的意义,则为每个缺少匹配的值添加一个分支。

dart
enum E { one, two, three }

String f(E e) => switch (e) {
    E.one => 'one',
    E.two => 'two',
    E.three => 'three',
  };

如果缺少的值不需要匹配,则添加一个通配符模式,该模式返回一个简单的默认值。

dart
enum E { one, two, three }

String f(E e) => switch (e) {
    E.one => 'one',
    E.two => 'two',
    _ => 'unknown',
  };

请注意,通配符模式将处理将来添加到类型中的任何值。如果 switch 需要更新以处理新添加的类型,你将失去编译器对此发出警告的能力。