将ListView项目转换为列表<string>?</string>

时间:2013-07-29 19:46:32

标签: c# winforms listviewitem

如何将ListView.Items投射到List<string>

这就是我的尝试:

List<string> list = lvFiles.Items.Cast<string>().ToList();

但我收到了这个错误:

  

无法将“System.Windows.Forms.ListViewItem”类型的对象强制转换为“System.String”。

4 个答案:

答案 0 :(得分:32)

ListViewItemCollection正如它所说的那样 - ListViewItem元素的集合。它不是 字符串的集合。您的代码在执行时失败的原因与此代码在编译时失败的原因相同:

ListViewItem item = lvFiles.Items[0];
string text = (string) item; // Invalid cast!

如果你想要一个字符串列表,每个字符串都取自Text的{​​{1}}属性,你可以轻松地做到这一点:

ListViewItem

答案 1 :(得分:5)

Cast方法基本上会尝试执行box / unbox,因此如果列表中的项目不是字符串,它将失败。试试这个:

List<string> list = lvFiles.Items.Cast<ListViewItem>()
                                 .Select(x => x.ToString()).ToList();

或者这个

List<string> list = lvFiles.Items.Cast<ListViewItem>()
                                 .Select(x => x.Text).ToList();

答案 2 :(得分:4)

尝试这样的事情

List<string> list = lvFiles.Items.Cast<ListViewItem>().Select(x=> x.ToString()).ToList();

答案 3 :(得分:3)

使用Select方法尝试此操作:

列表文字:

List<string> listText = lvFiles.Items.Select(item => item.Text).ToList();

列表值:

List<string> listValues = lvFiles.Items.Select(item => item.Value).ToList();

或许,对于两者:

Dictionary<string, string> files = lvFiles.Items.ToDictionary(key => key.Value, item => item.Text);