我有一个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
的类型,这意味着当列表不为空时,任何实例都应该是Book
或null
。
正如许多人已经指出的那样,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