这是嵌入在另一个循环中,嗯,它很慢。有更好的方法吗?
for(int i=0;i< listView.Items.Count;i++)
{
if(listView.Items[i].SubItems[3].Text == "asdf")
{
}
}
答案 0 :(得分:2)
有一种更好的方式:
foreach (ListViewItem item in listView.Items)
{
if (item.SubItems[3].Text == "asdf")
{
...
}
}
或者您可以使用LINQ:
var query = listView.Items
.Cast<ListViewItem>()
.Where(item => item.SubItems[3].Text == "asdf");
foreach (var item in query)
{
...
}
我怀疑那会更快......
你的外环是否会改变listView
?如果没有,你可以进行一次查询并在外循环中重用结果吗?
答案 1 :(得分:0)
如果有人使用WPF遇到此问题,那么当您使用.SubItems
时,item
上的foreach (ListViewItem item in listView.Items)
将无法获得DataRowView
。相反,我发现我可以使用foreach (DataRowView drv in listView.Items)
{
if (drv.Row[3].ToString() == "asdf")
{
...
}
}
并以这种方式获取单元格的值:
using System.Data;
您必须在课程顶部添加EMFILE
语句才能使用它。我发现它在WPF中工作,也可能在其他领域(即WinForms)。