Dart:比较任意类型的两个对象以检查它们是否相等



我使用以下代码使用重写的==运算符比较两个Person对象:

class Person {
  String ssn;
  String name;
  Person(this.ssn, this.name);
  bool operator ==(Object other) {
    return identical(this, other) ||
      other is Person && 
      ssn == other.ssn &&
      name == other.name;
  }
  
  @override int get hashCode => (ssn + name).hashCode;
}
main() {
  var bob =  Person('111', 'Bob');
  var robert =  Person('123', 'Robert');
  print(bob == robert); // false
}

然而,由于此代码与Person对象完美配合,是否有一种方法可以编写一个适用于任何两种类型的==运算符函数来比较它们,以检查它们是否相等?

如果你的问题是如何不为所有类编写equalshashCode实现,那么答案是现在没有办法。但是您可以使用包来简化这个过程。例如,您可以使用Equatable包,然后您的类将如下所示:

import 'package:equatable/equatable.dart';
class Person extends Equatable {
  String ssn;
  String name;
  Person(this.ssn, this.name);
  @override
  List<Object> get props => [name, ssn];
}

最新更新