如何在LINQ to objects中选择转换和选择?

时间:2012-09-12 12:44:40

标签: .net type-conversion linq-to-objects

LINQ to objects是我最好的朋友。我经常使用ConvertAll扩展方法来实现转换。

但是我意识到我可以通过使用Select扩展方法实现相同的目的。

例如,我有一个ListView,它显示一个Alarm对象列表。我将对象本身存储在ListView元素的Tag属性中。然后我以这种方式检索选择:

使用ConvertAll的

版本:

public Alarm[] SelectedTags
{
    get
    {
        return AlarmListView
               .SelectedItems
               .OfType<ListViewItem>()
               .ToList().ConvertAll(i => i.Tag as Alarm)
               .ToArray();
    }
}

版本选择:

public Alarm[] SelectedTags
{
    get
    {
        return AlarmListView
               .SelectedItems
               .OfType<ListViewItem>()
               .Select(i => i.Tag as Alarm)
               .ToArray();
    }
}

我个人更喜欢Select因为我可以轻松转换我的收藏品而无需将它们放在List中并使用ConvertAll。无论如何,两者都有充分的理由存在。

一个比另一个好吗?在哪些情况下?

1 个答案:

答案 0 :(得分:4)

ConvertAll自.Net 2.0以来一直存在,而LINQ则更新。 Select似乎更为一般,并使ConvertAll多余。

我无法想到您需要在新代码中使用ConvertAll的任何情况。 Select更为人所知,更为通用,并且与LINQ的其他功能一起使用(例如直接转换为LINQ to SQL中的SQL查询)。