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
。无论如何,两者都有充分的理由存在。
一个比另一个好吗?在哪些情况下?
答案 0 :(得分:4)
ConvertAll
自.Net 2.0以来一直存在,而LINQ则更新。 Select
似乎更为一般,并使ConvertAll
多余。
我无法想到您需要在新代码中使用ConvertAll
的任何情况。 Select
更为人所知,更为通用,并且与LINQ的其他功能一起使用(例如直接转换为LINQ to SQL中的SQL查询)。