简体   繁体   English

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

[英]How to convert the following foreach loop to linq format?

Code: 码:

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

testItems is of type ObservableCollection<TabItem> testItems的类型为ObservableCollection<TabItem>

How to convert the above foreach loop to linq format? 如何将上述foreach循环转换为linq格式? Thanks. 谢谢。

How about 怎么样

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

Given that items is ObservableCollection<TabItem> 鉴于itemsObservableCollection<TabItem>

you could try 你可以尝试

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

Providing that testItems has AddRange function, ie inherits from List : 假设testItems具有AddRange函数,即从List继承:

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

As you have mentioned,this is an ObservableCollection , so the method is not available. 如您所述,这是一个ObservableCollection ,因此该方法不可用。 In that case, the way you provided is the simplest possible. 在这种情况下,您提供的方法是最简单的方法。 However, if you need to use this functionality more often, consider checking the following link: 但是,如果您需要更频繁地使用此功能,请考虑检查以下链接:

ObservableCollection Doesn't support AddRange method, so I get notified for each item added, besides what about INotifyCollectionChanging? ObservableCollection不支持AddRange方法,因此除了INotifyCollectionChanging之外,我还会收到添加项的通知。

Or perhaps: 也许:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM