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版本是合理的,如果它有效的话。谢谢你的帮助谢谢你的帮助