如何检查Dart List是否包含特定的对象实例?



我有一个DartList<Book> bookList;在代码的某个地方,它已经填满了书。

如何检查bookList是否包含Book的实例?我试过这个

if(bookList.contains(Book))

但是没有成功。

可以使用is来检查List的类型。

if (bookList is List<Book>) { 
print("Yes");
}

您可以测试以下内容:

if (bookList.every((item) => item != null && item is Book)) {
...
}

如果您的bookList被设计为List,测试是否为空就足够了:

if (bookList.every((item) => item != null)) {
...
}

如果你想防止列表中出现null元素,你也应该在添加/update元素到列表中时强制执行它。

首先,您用List<Book>注释了bookList的类型,这意味着当列表不为空时,任何实例都应该是Booknull

正如许多人已经指出的那样,is用于测试对象是否具有指定的类型。对你来说,这并不能完全解决你的问题。如果列表包含null,代码

if (bookList is List<Book>) { 
print("Yes");
}

将产生Yes。你必须像这样检查:

class Book {
String title;
Book(this.title);
}
void main() {
List<Book> bookList = [
Book('foo'),
null,
];
if ((bookList?.length != 0 ?? false) && (!bookList?.contains(null) ?? false) && bookList is List<Book>) { 
print("Yes");
} else {
print("No");
}
}

提供空安全

编辑更新了我的答案,使bookList成为null的null安全。

检查文档:

  • is测试操作符:https://dart.dev/guides/language/language-tour#type-test-operators
  • null-safety: https://dart.dev/null-safety/understanding-null-safety

最新更新