如何将以下foreach循环转换为linq格式?

时间:2014-04-08 05:58:01

标签: c# .net linq foreach

代码:

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

testItems的类型为ObservableCollection<TabItem>

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

3 个答案:

答案 0 :(得分:4)

怎么样

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
}));

答案 1 :(得分:1)

提供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?

答案 2 :(得分:0)

或者也许:

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