【问题标题】:Yield statement cannot be used inside anonymous method [duplicate]Yield 语句不能在匿名方法中使用 [重复]
【发布时间】:2015-04-26 06:15:20
【问题描述】:

我正在使用以下有效的代码:

    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 语句不能在匿名方法中使用” - 如果不创建新的 List&lt;Tag&gt; 或必须将它们分开,有什么办法可以解决这个问题?

提前致谢。

【问题讨论】:

  • 没有IEnumerable.ForEach扩展方法。你要么有一个你写的自定义扩展方法,要么你的意思是List&lt;T&gt;.ForEach

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


【解决方案1】:

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

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

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

我想这就是你所需要的。

【讨论】:

    猜你喜欢
    • 2012-09-14
    • 1970-01-01
    • 2011-12-21
    • 2011-04-20
    • 1970-01-01
    • 2014-10-07
    • 2022-01-20
    • 2016-05-07
    相关资源
    最近更新 更多