Yield语句不能在匿名方法中使用

时间:2015-02-24 14:52:36

标签: c# asp.net linq anonymous-types yield

我使用以下有效的代码:

    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));

            });
    }

但是,我收到错误 - &#34;在匿名方法中不能使用Yield语句&#34; - 如果没有创建新的List<Tag>或者它们是否必须分开,有没有办法解决这个问题?

提前致谢。

1 个答案:

答案 0 :(得分:4)

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

在任何情况下,ForEach都无法从您传递的函数中接收返回值。我认为你的意思是Select

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

我认为这就是你所需要的。