跳至主要內容

不相關的型別相等檢查

運算元 ('{0}') 的型別不是被匹配值 ('{1}') 的子型別或超型別。

右運算元 ('{0}') 的型別不是左運算元 ('{1}') 的子型別或超型別。

描述

#

當比較兩個物件且這兩個物件的靜態型別都不是彼此的子型別時,分析器會產生此診斷。

這種比較通常會返回 false,可能無法反映程式設計師的意圖。

可能會出現誤報。例如,一個名為 Point 的類可能有兩個子類 CartesianPointPolarPoint,它們都不是彼此的子型別,但比較例項的相等性仍然可能是合適的。

一個具體的例子是,package:fixnum 包中的 Int64Int32 類允許將例項與 int 進行比較,前提是 int 在右側。這種情況是此診斷明確允許的,但其他類似情況則不允許。

示例

#

以下程式碼會產生此診斷,因為字串 s 正在與整數 1 進行比較

dart
bool f(String s) {
  return s == 1;
}

常見修復方法

#

將其中一個運算元替換為與另一運算元相容的內容

dart
bool f(String s) {
  return s.length == 1;
}