【问题标题】:How to convert the following foreach loop to linq format?如何将以下 foreach 循环转换为 linq 格式?
【发布时间】:2014-04-08 05:58:01
【问题描述】:

代码:

foreach (var item in items)
  testItems.Add(new TestItem { Header = item.TestItemTypeName, Content = item });

testItems 的类型为 ObservableCollection<TabItem>

如何将上述foreach循环转换为linq格式?谢谢。

【问题讨论】:

  • 只是好奇:为什么?还有testItems是什么类型的?
  • 类型是ObservableCollection<TabItem>

标签: c# .net linq foreach


【解决方案1】:

怎么样

items.ForEach(i => testItems.Add(
    new TestItem
    {
        Header = i.TestItemTypeName,
        Content = i
    }));

鉴于itemsObservableCollection<TabItem>

你可以试试

items.ToList().ForEach(i => testItems.Add(
new TestItem
{
    Header = i.TestItemTypeName,
    Content = i
}));

【讨论】:

  • .ForEach 未在智能感知中列出。
  • items 是列表还是 Enumerable
  • items 是一个IEnumerable。谢谢。
  • 您需要 NuGet "Ix_Main" 以获取IEnumerable<T>ForEach 运算符。它来自 Microsoft Reactive Framework 团队。
【解决方案2】:

假设testItems有AddRange函数,即继承自List

testItems.AddRange(items.Select(item => new TestItem{ Header = item.TestItemTypeName, Content = item }));

正如您所提到的,这是一个ObservableCollection,因此该方法不可用。在这种情况下,您提供的方式是最简单的。但是,如果您需要更频繁地使用此功能,请考虑查看以下链接:

ObservableCollection Doesn't support AddRange method, so I get notified for each item added, besides what about INotifyCollectionChanging?

【讨论】:

  • .AddRange 未在智能感知中列出。
  • @JohnStephen 我已经根据您的 cmets 改进了答案。
【解决方案3】:

或许:

var testItems = items
                   .Select(item => 
                       new TestItem {
                           Header = item.TestItemTypeName, 
                           Content = item
                       })
                    .ToList();

【讨论】:

    猜你喜欢
    • 2014-03-17
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多