不相关的类型相等检查
操作数 ('{0}') 的类型不是被匹配值 ('{1}') 的子类型或超类型。
右操作数 ('{0}') 的类型不是左操作数 ('{1}') 的子类型或超类型。
描述
#当比较两个对象且这两个对象的静态类型都不是彼此的子类型时,分析器会产生此诊断。
这种比较通常会返回 false
,可能无法反映程序员的意图。
可能会出现误报。例如,一个名为 Point
的类可能有两个子类 CartesianPoint
和 PolarPoint
,它们都不是彼此的子类型,但比较实例的相等性仍然可能是合适的。
一个具体的例子是,package:fixnum
包中的 Int64
和 Int32
类允许将实例与 int
进行比较,前提是 int
在右侧。这种情况是此诊断明确允许的,但其他类似情况则不允许。
示例
#以下代码会产生此诊断,因为字符串 s
正在与整数 1
进行比较
dart
bool f(String s) {
return s == 1;
}
常见修复方法
#将其中一个操作数替换为与另一操作数兼容的内容
dart
bool f(String s) {
return s.length == 1;
}