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

1 つの問題は、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

2 つの異なるクラスを含む TreeView でも同じ問題がありました。

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

したがって、項目を選択し、項目のタイプが MyClass の場合、新しい変数を作成し、SelectedItem をタイプ MyClass として設定します。

コレクション、リストなどでも同じことができます...

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

ListBox、ComboBoxなどに複数のクラスがある場合は、SelectedItemをチェックしてくださいif(... is type)

于 2013-06-28T07:27:38.160 に答える