将SelectedObjectCollection转换为特定类型的集合

时间:2013-06-28 06:53:22

标签: c# winforms collections type-conversion

我有一个WinForms多选列表框,列表框中的每个项目都是MyClass类型。

我也在编写一个需要采用MyClass集合的参数的方法。它可以是MyClass[]List<MyClass>IList<MyClass>IEnumerable<MyClass>等类型。其中任何一种都可以正常工作。

不知何故,我需要将列表框中的选定项目传递给我的方法。但是,如何将SelectedObjectCollection转换为上述任何MyClass集合类型?

4 个答案:

答案 0 :(得分:5)

也许这会有所帮助:

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

答案 1 :(得分:2)

一个问题是ListBox项不是通用列表,因此它可以包含多个类型。如果你呼叫.AsQueryable,那么当你呼叫.Select()时,你就会在非类型安全的集合上进行显式强制转换,与调用.Cast<T>相同,因为你可以获得强制转换异常。更安全的方法是使用.OfType<T>()

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

答案 2 :(得分:1)

您可以尝试Linq:

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

答案 3 :(得分:0)

我的TreeView遇到了同样的问题,它包含2个不同的类。

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

因此,如果您选择一个项目并且项目的类型是MyClass,则创建一个新变量并使用SelectedItem将其设置为MyClass类型。

您可以对Collection,List,...进行相同的操作。

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

如果在ListBox,ComboBox中有超过1个类,...只需使用if(... is type)检查SelectedItem

相关问题