C# 不能在匿名方法内使用Yield语句

C# 不能在匿名方法内使用Yield语句,c#,asp.net,linq,anonymous-types,yield,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.GetSupplierRout

我使用的代码如下:

    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 CreateTags()
{
var供应商=供应商查询.匹配条件(最小值,最大值);
foreach(供应商中的var项目)
{
var text=item.Name;
var route=PageRoute.GetSupplierRoute(item.Name);
返回新标签(文本、路线);
}
}
我一直在尝试使用IEnumerable.ForEach扩展方法将这两个stations链接在一起,如下所示:

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

            });
    }
IEnumerable CreateTags()
{
var suppliers=SupplierQuery.MatchTerms(最小值、最大值)
.ForEach(x=>
{
返回新标签(x.Name,PageRoute.GetSupplierRoute(x.Name));
});
}
然而,我得到了一个错误——“Yield语句不能在匿名方法中使用”——有没有办法绕过这个问题而不创建一个新的
列表
,或者必须将它们分开


提前感谢。

如果您坚持使用
收益回报率
,您必须使用单独的方法。一般来说,我建议首先尝试使用现有的查询操作符
CreateTags
可以通过
Select
轻松表达

return SupplierQuery.MatchTerms(Min, Max)
       .Select(x => new Tag(x.Name, PageRoute.GetSupplierRoute(x.Name)));
在任何情况下,
ForEach
都不能从您传递的函数接收返回值。我想你的意思是
选择

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

我想这就是你所需要的。

如果你坚持使用
收益率回报率
,你必须使用单独的方法。一般来说,我建议首先尝试使用现有的查询操作符
CreateTags
可以通过
Select
轻松表达

return SupplierQuery.MatchTerms(Min, Max)
       .Select(x => new Tag(x.Name, PageRoute.GetSupplierRoute(x.Name)));
在任何情况下,
ForEach
都不能从您传递的函数接收返回值。我想你的意思是
选择

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

我想这就是您所需要的。

没有
IEnumerable.ForEach
扩展方法。您可以使用自己编写的自定义扩展方法,或者您的意思是
List.ForEach
没有
IEnumerable.ForEach
扩展方法。您可以使用自己编写的自定义扩展方法,也可以使用
List.ForEach