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