即使到达return语句,函数也返回null

时间:2019-02-09 22:19:09

标签: dart

我的类中有一个函数,该函数应使用其Listid内找到一个对象,并返回匹配的对象。

static Category findById(List<Category> categories, String id) {
  categories.forEach((category) {
    if (category.id == id) {
      return category;
    }
  });
}

但是,findById始终返回null。 调试时,category.idid相等,并且编译器甚至跳转到return语句,但是返回值始终为null

1 个答案:

答案 0 :(得分:1)

您是从错误范围返回的。您实际上是在返回forEach方法,而不是findById。幸运的是,Dart具有内置功能,可以执行您想要的操作,即List.firstWhere

static Category findById(List<Category> categories, String id) => 
    categories.firstWhere((category) => category.id == id);

您还可以改用for循环,这也正是firstWhere所做的。这样,您可以在正确的范围内返回:

static Category findById(List<Category> categories, String id) {
  for (Category category in categories) 
    if (category.id == id) return category;
  return null; // no matching element
}

您可以找到more about scopes here

最后一个return null作为explained here是可选的。