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

Sam*_*eer 0 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

我试过了

this.SelectedItems
    .Where(item => item.DataContext is CatalogItem)
    .Select(item => item.DataContext)
Run Code Online (Sandbox Code Playgroud)

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

Vya*_*kov 7

试试这个:

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