メインコンテンツにスキップ

inconsistent_pattern_variable_logical_or

変数 '{0}' は、この論理 OR パターンの分岐で、型や final 性が異なります。

説明

#

この診断は、論理 OR パターンのすべての分岐で宣言されているパターン変数が、各分岐で同じ型を持たない場合にアナライザーによって生成されます。また、変数が異なる分岐で異なる final 性を持つ場合にも生成されます。論理 OR パターンの複数の分岐で宣言されたパターン変数は、各分岐で同じ型と final 性を持つことが要求されます。これにより、論理 OR パターンによってガードされているコードで、変数の型と final 性を認識できるようになります。

#

以下のコードは、変数 a が一方の分岐では int、もう一方の分岐では double として定義されているため、この診断を生成します。

dart
void f(Object? x) {
  if (x case (int a) || (double a)) {
    print(a);
  }
}

以下のコードは、変数 a が最初の分岐では final で、2番目の分岐では final でないため、この診断を生成します。

dart
void f(Object? x) {
  if (x case (final int a) || (int a)) {
    print(a);
  }
}

一般的な修正

#

変数の final 性が異なる場合は、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);
  }
}