基于列表视图项筛选字符串集合

本文关键字:筛选 字符串 集合 视图 于列表 列表 | 更新日期: 2023-09-27 18:11:11

已解决

奇怪的是,这里发生的事情似乎是string[]集合在没有元素的情况下被遍历。因此,每个项目都将从用户列表中删除。添加了一个额外的检查以确保nicks.Count !=0,它添加并完美工作。当代码做了你意想不到的事情时,你必须热爱;(

---[初始问题]-

所以,我有点困惑。

当我们连接到服务器时,我们会得到一个字符串收集结果string[]。然后,我们解析该字符串集合,并将名称添加到列表视图中。但是,我们还需要解析listview,并删除任何没有出现在字符串集合中的项。

我似乎想不出一个恰当的方法。我知道这很容易,但到目前为止,我尝试过的任何事情都失败了,这完全不酷:(

将字符串集合过滤到列表视图而不添加重复项的代码:

foreach (var nick in nicks)
        {
            if (string.IsNullOrEmpty(nick)) continue;
            var lvi = new ListViewItem
                          {
                              Text = nick,
                              Group = nick.StartsWith("@") ? listViewEx1.Groups[0] : listViewEx1.Groups[1]
                          };
            if (listViewEx1.Items.Count != 0)
            {
                var foundItem = listViewEx1.FindItemWithText(nick, true, 0, false);
                if (foundItem != null) continue;
            }
            lvi.ImageIndex = 0;
            listViewEx1.Items.Add(lvi);
        }

那么,我如何反过来比较listview中的项和字符串集合中的项,并删除那些不存在的项呢?

调试信息

Element in 'nicks':   Bot
Element in 'nicks':   Test
Element in 'nicks':   @Mike
Element in 'nicks':   @Jack
Element in 'nicks':   Joe
Element in 'nicks':   Nancy
Element in 'nicks':   Roger
Element in 'nicks':   
Does not contain:  @Mike
Does not contain:  @Jack
Does not contain:  Bot
Does not contain:  Joe
Does not contain:  Test
Does not contain:  Nancy
Does not contain:  Roger

奇怪的是,即使nicks[]集合包含项目,item.Text包含缺口,.Contains()调用也与之不匹配

如果这些只是简单的字符串,那么应该可以使用类似的方法:

List<ListViewItem> itemsToRemove = new List<ListViewItem>();
foreach(ListViewItem item in listViewEx1.Items)
{
   if(!nicks.Contains(item.Text))
      itemsToRemove.Add(item.Text);
}
foreach(ListViewItem item in itemsToRemove)
   listViewEx1.Items.Remove(item);

单独的remove循环的原因是您不想在迭代过程中修改Items集合,否则会出现异常。

基于列表视图项筛选字符串集合