2

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

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

例如,我有一个显示警报对象列表的 ListView。我将对象本身存储在 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,因为我可以轻松转换我的收藏,而无需将它们放入 aList和使用ConvertAll. 无论如何,两者当然都有充分的理由存在。

这个比那个好吗 ?在哪些情况下?

4

1 回答 1

4

ConvertAll自 .Net 2.0 以来一直存在,而 LINQ 较新。Select显得更笼统,而且显得ConvertAll多余。

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

于 2012-09-12T12:48:27.777 回答