我使用以下有效的代码:
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>
或者它们是否必须分开,有没有办法解决这个问题?
提前致谢。
答案 0 :(得分:4)
如果您坚持使用yield return
,则必须使用单独的方法。一般来说,我建议首先尝试使用现有的查询运算符。可以使用CreateTags
轻松表达Select
。
在任何情况下,ForEach
都无法从您传递的函数中接收返回值。我认为你的意思是Select
。
return SupplierQuery.MatchTerms(Min, Max)
.Select(x => new Tag(x.Name, PageRoute.GetSupplierRoute(x.Name)));
我认为这就是你所需要的。