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

use*_*609 14 c# listviewitem winforms

我怎么能投ListView.ItemsList<string>

这是我试过的:

List<string> list = lvFiles.Items.Cast<string>().ToList();
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误:

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

Jon*_*eet 33

A ListViewItemCollection正是它听起来的样子 - ListViewItem元素的集合.它不是字符串的集合.您的代码在执行时失败的原因与此代码在编译时失败的原因相同:

ListViewItem item = lvFiles.Items[0];
string text = (string) item; // Invalid cast!
Run Code Online (Sandbox Code Playgroud)

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

List<string> list = lvFiles.Items.Cast<ListViewItem>()
                                 .Select(item => item.Text)
                                 .ToList();
Run Code Online (Sandbox Code Playgroud)

  • @ user2214609:我不知道,因为我们甚至不知道`ListView`包含文件名.听起来你应该问这个问题 - 一个`ListViewItem`上的`Text`属性的内容用一个文件名填充,与将一个`ListViewItem`值的集合转换成一个*非常*不同.列表<字符串>`. (2认同)

p.s*_*w.g 5

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

List<string> list = lvFiles.Items.Cast<ListViewItem>()
                                 .Select(x => x.ToString()).ToList();
Run Code Online (Sandbox Code Playgroud)

或这个

List<string> list = lvFiles.Items.Cast<ListViewItem>()
                                 .Select(x => x.Text).ToList();
Run Code Online (Sandbox Code Playgroud)


Sri*_*vel 5

尝试这样的事情

List<string> list = lvFiles.Items.Cast<ListViewItem>().Select(x=> x.ToString()).ToList();
Run Code Online (Sandbox Code Playgroud)