Tom*_*len 6 c# asp.net loops list
鉴于代码:
var AllItems = new List<CartItem>();
using(var db = new MainContext())
{
foreach (var item in AllItems)
{
if (!db.tblStoreItems.Where(i => i.ID == item.ItemID).Any())
{
AllItems.Remove(item);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是从循环中的List对象中删除项目的最佳方法吗?
我不这么认为.如果从正在迭代的列表中删除项目,结果将是安全错误的.
最好以旧方式使用 - 以相反的顺序循环
using(var db = new MainContext())
{
for(int x = AllItems.Count - 1; x >= 0; x--)
{
var item = AllItems[x];
if (!db.tblStoreItems.Where(i => i.ID == item.ItemID).Any())
{
AllItems.RemoveAt(x);
}
}
}
Run Code Online (Sandbox Code Playgroud)
循环方法有几个问题,主要是 - 您无法从当前正在迭代的集合中删除项目foreach
- 您将获得异常.
由于您的主集合是a List<T>
,因此您应该使用RemoveAll
带有谓词的方法.您还应该像这样简化查询:
AllItems.RemoveAll(item => !db.tblStoreItems.Any(i => i.ID == item.ItemID));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4129 次 |
最近记录: |