2012-07-19 35 views
0

我想編寫一個簡單的例程來處理ListView中的項目列表,並且只能處理所有項目或選定的項目。我預計這個工作:如何將SelectedListViewItemCollection轉換爲ListViewItemCollection

private void PurgeListOfStudies(ListView.ListViewItemCollection lvic) 
{ 
    /// process items in the list... 
} 

,然後調用它像這樣:

PurgeListOfStudies(myStudiesPageCurrent.ListView.Items); 

或本

PurgeListOfStudies(myStudiesPageCurrent.ListView.SelectedItems); 

然而,兩個列表有不同的和無關的類型,ListViewItemCollectionSelectedListViewItemCollection分別。

我試過改變參數的類型爲object,ICollection<ListViewItem>和其他一些東西。但是由於類型看起來完全不相關,所以在編譯時或者在執行期間,一切都會失敗。

這一切對我來說都很奇怪,因爲這些在現實中顯然是同一類型(列表ListViewItem s)。

我在這裏錯過了什麼嗎?

回答

5

使用MSDN文檔。

正如你可以看到,這兩個類實現的接口:IListICollectionIEnumerable。您應該能夠將其中的任何一個用作通用界面。

注意這些是而不是通用版本(即IEnumerable <T>))。您必須枚舉集合並手動將它們轉換爲所需的對象類型。

private void PurgeListOfStudies(IEnumerable items) 
{ 
    foreach(MyType currentItem in items) //implicit casting to desired type 
    { 
     // process current item in the list... 
    } 
} 
+0

我確實讀過MSDN - 但忽略了非泛型集合。我嘗試了一些通用集合的變體。謝謝。 – 2012-07-19 17:29:07

+0

我很欣賞這個答案。我一直在嘗試使用泛型,所以現在我知道我的錯誤。 – Grungondola 2016-03-14 13:12:59

0

如果你想使PurgeListOfStudies多一點類型安全的,你可以把它帶到IEnumerable<ListViewItem>類型的參數,像這樣:

private void PurgeListOfStudies(IEnumerable<ListViewItem> items) 
{ 
    /// process items in the list... 
} 

,並調用它像這樣:

PurgeListOfStudies(myStudiesPageCurrent.ListView.Items.OfType<ListViewItem>()); 

或此:

PurgeListOfStudies(myStudiesPageCurrent.ListView.SelectedItems.OfType<ListViewItem>()); 

OfType<ListViewItem>()擴展方法將非通用IEnumerable轉換爲更安全類型IEnumerable<ListViewItem>

編輯: 如果你具有惱火顯式調用OfType<ListViewItem>(),你可以擴展方法添加到ListView控件:

static class ListViewExtensions 
{ 
    public static IEnumerable<ListViewItem> SelectedListViewItems(this ListView listView) 
    { 
     return listView.SelectedItems.OfType<ListViewItem>(); 
    } 

    public static IEnumerable<ListViewItem> ListViewItems(this ListView listView) 
    { 
     return listView.Items.OfType<ListViewItem>(); 
    } 
} 

,然後調用

PurgeListOfStudies(myStudiesPageCurrent.ListView.ListViewItems()); 

PurgeListOfStudies(myStudiesPageCurrent.ListView.SelectedListViewItems()); 
相關問題