匿名方法中不能使用 yield 语句

Yield statement cannot be used inside anonymous method

我正在使用以下有效的代码:

    IEnumerable<Tag> CreateTags()
    {
        var suppliers = SupplierQuery.MatchTerms(Min, Max);

        foreach (var item in suppliers)
        {
            var text = item.Name;
            var route = PageRoute.GetSupplierRoute(item.Name);

            yield return new Tag(text, route);
        }
    }

我一直在尝试使用 IEnumerable.ForEach 扩展方法将这两个语句链接在一起,如下所示:

    IEnumerable<Tag> CreateTags()
    {
        var suppliers = SupplierQuery.MatchTerms(Min, Max)
            .ForEach(x =>
            {
                yield return new Tag(x.Name, PageRoute.GetSupplierRoute(x.Name));

            });
    }

但是,我得到一个错误 - "Yield statement cannot be used inside an anonymous method" - 有没有办法解决这个问题而不创建新的 List<Tag> 或者必须将它们分开?

提前致谢。

如果您坚持使用yield return,您必须使用单独的方法。一般来说,我建议首先尝试使用现有的查询运算符。 CreateTags可以很容易地用Select表示。

在任何情况下 ForEach 都无法从您传递的函数中接收 return 值。我想你的意思是 Select.

return SupplierQuery.MatchTerms(Min, Max)
       .Select(x => new Tag(x.Name, PageRoute.GetSupplierRoute(x.Name)));

我想这就是你所需要的。