.Net Framework 4.5.1 RemoveAt
本文关键字:RemoveAt Framework Net | 更新日期: 2023-09-27 18:26:27
我已经将MVC应用程序从linq迁移到Sql,再迁移到EF 6.1.1,并从.Net Framework 4.0迁移到4.5.1。我使用以下内容从列表中删除项目:
List<int> idsToKeep = new List<int>();
for (int i = 0; i < visit.Client.Count; i++)
{
Client om = visit.Client[i];
if (om.ClientId == 0)
continue;
bool itemExists = false;
foreach (int id in idsToKeep)
if (om.ClientId == id)
itemExists = true;
if (!itemExists)
{
visit.Client.RemoveAt(i);
i--;
}
}
return errors;
}
最初我得到了这个错误:
cannot apply indexing with to an expression of type system.collections.generic.iCollection
这一行:
Client om = visit.Client[i];
更改为:
Client om = visit.Client.ElementAt(i);
我不确定这是正确的,但没有得到任何错误;问题是我无法解决这一行中的RemoveAt:
visit.Client.RemoveAt(i);
非常感谢您的建议
似乎visit.Client
是ICollection<T>
,而ICollection<T>
上没有RemoveAt
方法。您可以尝试使用ToList
方法将其转换为List,也可以使用linq排除您想要的项目:
visit.Client = visit.Client.Where(x => x.ClientId == 0 ||
idsToKeep.Contains(x.ClientId)).ToList();
试试这个,诀窍是你必须从下往上删除。。。
var visit = new Visit();
List<int> idsToKeep = new List<int>();
visit.Client.Reverse();
foreach(var thing in visit.Client){
Client om = thing;
if (om.ClientId == 0)continue;
bool itemExists = false;
foreach (int id in idsToKeep)
if (om.ClientId == id)
itemExists = true;
if (!itemExists)
{
visit.Client.Remove(thing);
}
}
return errors;