在linq中收益率的回报

时间:2012-08-05 10:57:06

标签: linq foreach return yield

问题: 任何人都可以告诉我如何在linq中返回值。 我想返回一个RadToolBarButtons集合,并在创建时为它们分配值。

代码: 我试过两种方式:

IEnumerable<RadToolBarButton> collection = ContextMenuColumn.ToList()
      .ForEach(x => yield return new RadToolBarButton() { Value = x });

错误11无法将类型'void'隐式转换为'System.Collections.Generic.IEnumerable'

IEnumerable<RadToolBarButton> collection =
    ContextMenuColumn.SelectMany<string,IEnumerable<RadToolBarButton>>(
       x => new RadToolBarButton() { Value = x });

错误11无法将类型'Telerik.Web.UI.RadToolBarButton'隐式转换为'System.Collections.Generic.IEnumerable&gt;'。存在显式转换(您是否错过了演员?)

2 个答案:

答案 0 :(得分:4)

您应该使用Select代替ForEach,它可以满足您的需求。

IEnumerable<RadToolBarButton> collection = ContextMenuColumn.ToList()
  .Select(x => new RadToolBarButton { Value = x });

我不确定内部ToList是否有必要,您可以使用Cast<T>代替实现中间列表。

答案 1 :(得分:1)

使用Select代替ForEach,它会为您yield returm执行