跳至主要内容

不相关的类型相等检查

操作数 ('{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;
}