使用'is'运算符将foreach转换为LINQ

时间:2013-12-25 09:59:53

标签: c# linq lambda

我必须使用LINQ / Lambda而不是ForEach循环。 以下是我的代码

List<CatalogItem> catalogItems = new List<CatalogItem>();
foreach (TreeViewItem item in this.SelectedItems)
{
    if (item.DataContext is CatalogItem)
    {
        catalogItems.Add((CatalogItem)item.DataContext);
    }
}

我想知道如何在LINQ中使用'is'运算符。

我试过了

this.SelectedItems
    .Where(item => item.DataContext is CatalogItem)
    .Select(item => item.DataContext)

但没有得到理想的结果。 请帮忙。

3 个答案:

答案 0 :(得分:7)

试试这个:

var catalogItems = this.SelectedItems
    .OfType<TreeViewItem>()//If the SelectedItems is IEnumerable
    .Select(item => item.DataContext)
    .OfType<CatalogItem>()
    .ToList();

答案 1 :(得分:0)

你可以尝试这个:

this.SelectedItems
.Select(item => item.DataContext as CatalogItem)
.Where(item => item != null);

答案 2 :(得分:0)

或者像这样:

var catalogItems = (from item in SelectedItems 
                    where item.DataContext is CatalogItem 
                    select (CatalogItem) item.DataContext).ToList();