2

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

我还在编写一个方法,该方法需要一个参数,该参数是MyClass. 它可以是 , , , 等类型MyClass[]List<MyClass>其中IList<MyClass>任何IEnumerable<MyClass>一个都可以正常工作。

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

4

4 回答 4

5

也许这有帮助:

IEnumerable<MyClass> items = yourListBox.SelectedItems.Cast<MyClass>();
于 2013-06-28T06:59:42.337 回答
2

一个问题是ListBoxItems 不是通用列表,因此它可能包含多个类型。如果您调用 on 时,.AsQueryable您正在对非类型安全的集合进行显式转换.Select(),调用时也是如此.Cast<T>,因为您可能会遇到转换异常。更安全的方法是使用.OfType<T>()

IEnumerable<MyClass> selected = listBox.SelectedItems.OfType<MyClass>();
于 2013-06-28T07:23:31.603 回答
1

你可以试试 Linq:

yourSelectedObjectCollection.AsQueryable().Select(o=>(MyClass)o).ToArray()
于 2013-06-28T06:58:36.500 回答
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 个类,只需检查 SelectedItemif(... is type)

于 2013-06-28T07:27:38.160 回答