我想根据其成员变量的特定搜索条件从列表中获取对象

这是我正在使用的代码

class foo
{
  foo(this._a);
  int _a;
}

List<foo> lst = new List<foo>();

main()
{
  foo f = new foo(12);

  lst.add(f);
  List<foo> result = lst.where( (foo m) {
    return m._a == 12;
  });

  print(result[0]._a);
}

我收到错误,但不确定如何解决此问题

未捕获的异常:

TypeError: Instance of 'WhereIterable<foo>': type 'WhereIterable<foo>' is not a subtype of type 'List<foo>'

我正在try 搜索其成员变量为a == 12的对象.对我可能做错了什么有什么建议吗?

推荐答案

Iterable.where方法返回满足您的测试的all个成员的迭代数,而不只是一个,而且它是一个延迟计算的迭代数,而不是一个列表.您可以使用lst.where(test).toList()来创建列表,但是如果您只需要第一个元素,那就太过分了.

您可以使用lst.firstWhere(test)来仅返回第一个元素,也可以使用lst.where(test).first来有效地执行相同的操作. 在这两种情况下,如果测试没有匹配的元素,则代码将抛出.

为了避免投掷,你可以使用var result = lst.firstWhere(test, orElse: () => null),如果没有这样的元素,你可以得到null.

另一种 Select 是

foo result;
int index = lst.indexWhere(test); 
if (index >= 0) result = lst[index];

Dart相关问答推荐

我们应该将多少代码放入构造函数中?

数字到字符串的转换在 Dart 中总是不变的(即没有文化)?

在`lib`文件夹中使用`src`子文件夹有什么好处吗

如何在 Flutter 中忽略整个文件的 lint 规则?

在小部件之间画一条线

Flutter:将照片或图像显示为模态弹出窗口

Dart 中使用 ifAbsent 的 Map Update 方法

在 Dart 中向服务器发出多个独立请求的最佳方式

如何在Flatter dart中使用相同的元素初始化列表?

错误:无法将参数类型void Function(ImageInfo, bool)分配给参数类型ImageStreamListener

Expansion Panel底部溢出

在 Dart 中将类类型作为变量传递

扩展一个只有一个工厂构造函数的类

如何用dart语言初始化超类变量?

Dart 中的多行字符串

是否有任何官方计划在 Google App Engine 上支持 Dart?

如何在 Dart 中从外部查询 shadow DOM 中的元素?

如何初始化构造函数主体中的最终字段?

将方法或值添加到 dart 中的枚举

如何使用 Dart 将字符串解析为数字?