我如何将ListView.Items
投射到List<string>
?将ListView Items列出来<string>?
这是我的尝试:
List<string> list = lvFiles.Items.Cast<string>().ToList();
但我收到此错误:
Unable to cast object of type 'System.Windows.Forms.ListViewItem' to type 'System.String'.
我如何将ListView.Items
投射到List<string>
?将ListView Items列出来<string>?
这是我的尝试:
List<string> list = lvFiles.Items.Cast<string>().ToList();
但我收到此错误:
Unable to cast object of type 'System.Windows.Forms.ListViewItem' to type 'System.String'.
一个ListViewItemCollection
正是这听起来像 - ListViewItem
元素的集合。这是而不是字符串的集合。您的代码在执行时失败,出于同样的原因,该代码会在编译时失败:如果你想串,每个从ListViewItem
的Text
财产采取的列表
ListViewItem item = lvFiles.Items[0];
string text = (string) item; // Invalid cast!
,你可以做这很容易:
List<string> list = lvFiles.Items.Cast<ListViewItem>()
.Select(item => item.Text)
.ToList();
的Cast
方法本质上尝试执行盒/拆箱,所以如果项目会失败在列表中不是字符串。试试这个:
List<string> list = lvFiles.Items.Cast<ListViewItem>()
.Select(x => x.ToString()).ToList();
或者这
List<string> list = lvFiles.Items.Cast<ListViewItem>()
.Select(x => x.Text).ToList();
不会将您的第一个例子给你一个列表,其中的每一个元素是字符串“System.Windows.Forms的。 ListViewItem“? –
看起来它会给“ListViewItem:{text here}” – Blorgbeard
@AdamV我不确定我的头顶是什么ListViewItem.ToString将返回(这就是为什么我给了备用解决方案)。 'ListViewItem'没有[覆盖'ToString'](http://msdn.microsoft.com/en-us/library/9syath98.aspx),所以我认为它做的不仅仅是返回它自己的类型名称。 –
尝试是这样的
List<string> list = lvFiles.Items.Cast<ListViewItem>().Select(x=> x.ToString()).ToList();
@Downvoter不要忘记发表评论 –
试试这个使用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);
为什么我只能看到文件名而不是整个路径? – user2214609
@ user2214609:我不知道,因为我们甚至不知道'ListView'包含文件名。这听起来像你应该问,作为一个单独的问题 - 在ListViewItem中填充文件名的Text属性的内容与将ListViewItem值的集合转换为“列表'。 –
如果我没有Cast或任何LINQ函数,我该怎么办? (WinForm项目) – 2015-11-28 14:37:49