inconsistent_pattern_variable_logical_or
变量“{0}”在此逻辑或模式分支中具有不同的类型和/或最终性。
描述
#当逻辑或模式的所有分支上声明的模式变量在每个分支上类型不同时,分析器会产生此诊断。当变量在不同分支上具有不同的最终性(finality)时,也会产生此诊断。在逻辑或模式的多个分支上声明的模式变量要求在每个分支上具有相同的类型和最终性,以便在逻辑或模式守护的代码中能够确定该变量的类型和最终性。
示例
#以下代码会产生此诊断,因为变量 a
在一个分支中被定义为 int
类型,而在另一个分支中被定义为 double
类型
dart
void f(Object? x) {
if (x case (int a) || (double a)) {
print(a);
}
}
以下代码会产生此诊断,因为变量 a
在第一个分支中是 final
的,而在第二个分支中不是 final
的
dart
void f(Object? x) {
if (x case (final int a) || (int a)) {
print(a);
}
}
常见修复
#如果变量的最终性不同,请确定它应该是 final
还是非 final
,并使各情况保持一致
dart
void f(Object? x) {
if (x case (int a) || (int a)) {
print(a);
}
}
如果变量的类型不同,且类型对于匹配条件并非关键,请确保变量在两个分支上具有相同的类型
dart
void f(Object? x) {
if (x case (num a) || (num a)) {
print(a);
}
}
如果变量的类型不同,且类型对于匹配条件至关重要,则考虑将条件拆分为多个 if
语句或 case
子句
dart
void f(Object? x) {
if (x case int a) {
print(a);
} else if (x case double a) {
print(a);
}
}