对不起标题,我想不出更具描述性/简洁性的方式来传达我的问题。
我的问题是我有一个函数通过foreach循环对ListViewItems的集合进行操作,它将操作的项目列表取决于函数的布尔参数,称之为 bSelected
如果是这样,我想使用列表视图中的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#经验,所以感谢您的帮助。
答案 0 :(得分:1)
尝试使用无类型的无类型IEnumerable:
IEnumerable listEnumerable =
( bSelected ? lvList.SelectedItems
: lvList.Items);
foreach ( ListViewItem lvi in listEnumerable ) { ... }
答案 1 :(得分:1)
您可以使用IList,因为它们都实现了它。请尝试以下方法:
IList listItems =
( bSelected ? (IList)lvList.SelectedItems
: (IList)lvList.Items );
foreach ( ListViewItem lvi in listItems ) { ... }
答案 2 :(得分:1)
您可以强制它成为强类型列表,如下所示:
List<ListViewItem> listItems =
( bSelected ? lvList.SelectedItems.Cast<ListViewItem>().ToList()
: lvList.Items.Cast<ListViewItem>().ToList() );
转到here了解有关Cast
答案 3 :(得分:0)
在文档中,它表示类型为ListViewItemCollection
:
http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.items.aspx