2013-06-28 38 views
2

我有一個WinForms多選列表框,列表框中的每個項目的類型爲MyClass將SelectedObjectCollection轉換爲特定類型的集合

我還在寫一個方法,需要採用一個參數MyClass的集合。它可能是MyClass[],List<MyClass>,IList<MyClass>,IEnumerable<MyClass>等等,這些都可以正常工作。

不知何故,我需要將列表框中的選定項目傳遞給我的方法。但是,我如何將SelectedObjectCollection轉換爲上述任何MyClass收集類型?

回答

5

也許這會有所幫助:

IEnumerable<MyClass> items = yourListBox.SelectedItems.Cast<MyClass>(); 
1

您可以嘗試的LINQ:

yourSelectedObjectCollection.AsQueryable().Select(o=>(MyClass)o).ToArray() 
+0

的的SelectedItem將其轉換爲Queryable對象後沒有'Select()'方法 –

2

一個問題是,ListBox的項目是不是一個通用的清單,因此它可以包含多個類型。如果您致電.AsQueryable,則當您致電.Select()時,您正在對非類型安全的收集進行明確演員表,與調用.Cast<T>相同,因爲您可能會收到演員表演異常。一個更安全的方法是使用.OfType<T>()

IEnumerable<MyClass> selected = listBox.SelectedItems.OfType<MyClass>(); 
0

我有同樣的問題,我的樹視圖,其中含有2個不同的類別。

if(SelectedItem is MyClass) 
{ 
    MyClass passvariable = (MyClass)SelectedItem; 
} 

所以,如果你選擇一個項目,是MyClass的項目的類型,您創建一個新的變量並使用的SelectedItem類型MyClass的設置。

你可以做同樣的一個集合,列表,...

if(MyList is ObservableCollection<MyClass>) 
{ 
    ObservableCollection<MyClass> passlist = (ObservableCollection<MyClass>)MyList; 
} 

如果你有一個列表框,組合框更多然後1級,...只是檢查與if(... is type)

相關問題