2012-09-12 41 views
2

对象的LINQ是我最好的朋友。我经常使用ConvertAll扩展方法来实现转换。如何选择使用LINQ转换和选择对象?

但是我意识到我可以通过使用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,因为我可以很容易地转换我的收藏,而不必须将它们放入List并使用ConvertAll。无论如何,两者都有充分的理由存在。

一个比另一个更好吗?在哪些场景中?

回答

4

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

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

+0

我意识到现在我错误地认为ConvertAll是LINQ to Object的一部分。非常感谢您的澄清。 – Larry