タイトルが申し訳ありませんが、私の問題を伝えるためのより説明的/簡潔な方法は考えられませんでした。
私の問題は、foreach ループを介して ListViewItems のコレクションを操作する関数があり、それが操作する項目のリストは、関数へのブール値パラメーターに依存し、それをbSelectedと呼ぶことです。
これが true の場合は、リスト ビューから SelectedItems を使用します。それ以外の場合は、リスト ビューの Items を使用します。
アイテムのリストを表すこのオブジェクトがどうあるべきか、またはそれを取得する方法を判断するのに苦労しています。私はいくつかの異なるアプローチを試しました( ListView はlvListと呼ばれることに注意してください):
IList<ListViewItem> listItems =
( bSelected ? (IList<ListViewItem>)lvList.SelectedItems
: (IList<ListViewItem>)lvList.Items );
foreach ( ListViewItem lvi in listItems ) { ... }
と
IEnumerator<ListViewItem> listEnumerator =
( bSelected ? (IEnumerator<ListViewItem>)lvList.SelectedItems.GetEnumerator()
: (IEnumerator<ListViewItem>)lvList.Items.GetEnumerator() );
while ( listEnumerator.MoveNext() ) { ... }
同様の同類の他のソリューションを試しましたが、SelectedItems に適用される型変換に関係する実行時エラーが発生します。
foreach ループを一方のリストまたは他方のリストで直接使用すると、次のように動作するため、方法が必要であることはわかっています。
foreach ( ListViewItem lvi in lvList.SelectedItems ) { ... }
と
foreach ( ListViewItem lvi in lvList.Items ) { ... }
私は C# の経験があまりないので、助けていただければ幸いです。