C# 删除列表中的项目并进行搜索

C# 删除列表中的项目并进行搜索,c#,list,C#,List,有什么方法可以搜索列表并删除空项目吗 ObservableCollection ListOfTnAGroupAccs <Model> foreach (var item in ListOfTnAGroupAccs) { if(item.Prefix == "" && item.ReportingGrp == "" && item.AccMngInitials == "" &&

有什么方法可以搜索
列表
并删除空项目吗

 ObservableCollection ListOfTnAGroupAccs <Model>

        foreach (var item in ListOfTnAGroupAccs)
        {
            if(item.Prefix == "" && item.ReportingGrp == "" && item.AccMngInitials == "" && item.Description == "")
            {
                ListOfTnAGroupAccs.Remove(item);
                continue;
            }
        }

但我好奇的是,还有更好的方法吗

在迭代项时不能删除它们,因此会出现异常。一种方法是执行常规的向后for循环:

for(int i = ListOfTnAGroupAccs.Length -1; i >= 0; --i)
{
    var item = ListOfTnAGroupAccs[i];
    if(item.Prefix == "" && item.ReportingGrp == "" && item.AccMngInitials == "" && item.Description == "")
    {
        ListOfTnAGroupAccs.Remove(item);
        continue;
    }
}

您不能在迭代项时删除它们,从而导致异常。一种方法是执行常规的向后for循环:

for(int i = ListOfTnAGroupAccs.Length -1; i >= 0; --i)
{
    var item = ListOfTnAGroupAccs[i];
    if(item.Prefix == "" && item.ReportingGrp == "" && item.AccMngInitials == "" && item.Description == "")
    {
        ListOfTnAGroupAccs.Remove(item);
        continue;
    }
}

发生这种情况的方式是在循环中对要修改的集合进行迭代,这可能会中断迭代

最好的方法是向后循环:

for(int i = ListOfTnAGroupAccs.Length - 1; i >= 0; i--)
  if(item.Prefix == "" && item.ReportingGrp == "" && item.AccMngInitials == "" && item.Description == "")
    ListOfTnAGroupAccs.RemoveAt(i);

发生这种情况的方式是在循环中对要修改的集合进行迭代,这可能会中断迭代

最好的方法是向后循环:

for(int i = ListOfTnAGroupAccs.Length - 1; i >= 0; i--)
  if(item.Prefix == "" && item.ReportingGrp == "" && item.AccMngInitials == "" && item.Description == "")
    ListOfTnAGroupAccs.RemoveAt(i);

使用for循环而不是foreach

for (int i = ListOfTnAGroupAccs.Count-1; i>=0; i--)
{
    if(ListOfTnAGroupAccs[i].Prefix == "" && ListOfTnAGroupAccs[i].ReportingGrp == "" && ListOfTnAGroupAccs[i].AccMngInitials == "" && ListOfTnAGroupAccs[i].Description == "")
    {
        ListOfTnAGroupAccs.RemoveAt(i);
        continue;
    }
}

我们按相反的顺序浏览列表,因为我们删除了项。通过这种方式,我们可以防止索引自动失效异常

使用for循环而不是foreach

for (int i = ListOfTnAGroupAccs.Count-1; i>=0; i--)
{
    if(ListOfTnAGroupAccs[i].Prefix == "" && ListOfTnAGroupAccs[i].ReportingGrp == "" && ListOfTnAGroupAccs[i].AccMngInitials == "" && ListOfTnAGroupAccs[i].Description == "")
    {
        ListOfTnAGroupAccs.RemoveAt(i);
        continue;
    }
}

我们按相反的顺序浏览列表,因为我们删除了项。通过这种方式,我们可以防止出现
IndexOutOfRangeException

,您可能需要将要删除的项记录在另一个变量中,然后在循环完成后运行所有项的批量删除。但是linq版本是合理的,如果可行的话。您可能需要将要删除的项目记录在另一个变量中,然后在循环完成后运行所有项目的批量删除。但是linq版本是合理的,如果它有效的话。谢谢你的帮助谢谢你的帮助