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
. 无论如何,两者当然都有充分的理由存在。
这个比那个好吗 ?在哪些情况下?