2012-09-12 46 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