匿名方法中不能使用 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)));
我想这就是你所需要的。
我正在使用以下有效的代码:
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)));
我想这就是你所需要的。