有什么办法可以搜索List<T>
并删除空白项目?
ObservableCollection ListOfTnAGroupAccs <Model>
foreach (var item in ListOfTnAGroupAccs)
{
if(item.Prefix == "" && item.ReportingGrp == "" && item.AccMngInitials == "" && item.Description == "")
{
ListOfTnAGroupAccs.Remove(item);
continue;
}
}
它给我“集合被修改;枚举操作可能无法执行”
我可以使用
var nList = ListOfTnAGroupAccs.Where(l => l.Prefix != "" && l.ReportingGrp != "" && l.AccMngInitials != "" && l.Description != "").ToList();
但是我的好奇心还有更好的方法吗?
答案 0 :(得分:2)
在迭代时无法删除项目,因此也无法删除。一种方法是定期向后进行循环:
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;
}
}
答案 1 :(得分:0)
它发生的方式是您要循环访问要修改的集合,这可能会中断迭代。
最好的方法是向后循环:
CustomerID PhoneNumber CreatedDate
2222 7654312 2013-02-05
1111 1243557 2013-09-11
答案 2 :(得分:0)
使用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
。