Las*_*eak 2 c# linq asp.net lambda
我有一个cart.Lines列表,并希望删除所有数量== 0的项目
这是一个包含CartLine对象集合的列表:
public class Cart
{
private IList<CartLine> lines = new List<CartLine>();
public IList<CartLine> Lines { get { return lines; } set { lines = value; } }
}
public class CartLine
{
Product Product {get; set;}
int Quantity {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
所以类似于:
cart.Lines.RemoveAll(x => x.Quantity == 0)
Run Code Online (Sandbox Code Playgroud)
我只得到删除和删除,而不是删除所有!
也无法在foreach循环中删除,得到错误:集合被修改; 枚举操作可能无法执行.
我现在设法用这个代码来做,肯定必须有更高效的东西?
var myList = cart.Lines.ToList();
myList.RemoveAll(x => x.Quantity == 0);
cart.Lines = myList;
Run Code Online (Sandbox Code Playgroud)
好的问题解决了!谢谢大家,这里做到了:
cart.Lines = cart.Lines.Where(x => x.Quantity!= 0);
如果Lines是a List<T>,那么最简单的方法就是写:
cart.Lines.RemoveAll(x => x.Quantity == 0);
Run Code Online (Sandbox Code Playgroud)
IEnumerable<T>但是,如果Lines是一个,你可以选择否定(如Vlad建议的那样) - 你也可以使用ToList()然后更改为列表,RemoveAll()但这样做会有点过分.
cart.Lines = cart.Lines.Where(x => x.Quantity != 0);
Run Code Online (Sandbox Code Playgroud)
更新:
由于你说Lines是a IList<T>,那么你需要选择否定并转换为如下列表:
cart.Lines = cart.Lines.Where(x => x.Quantity != 0).ToList();
Run Code Online (Sandbox Code Playgroud)
或者您可以转换为List<T>使用ToList()然后调用RemoveAll()然后保存回来:
var temp = cart.Lines.ToList();
temp.RemoveAll(x => x.Quantity != 0);
cart.Lines = temp;
Run Code Online (Sandbox Code Playgroud)
顺便说一句,作为一个FYI我定时建立一个删除列表,然后使用Remove()vs选择否定使用Where()和调用ToList()和Where/ToList组合更快,这是有道理的,因为它们都分配内存,但Where/ToList做了很少的内存改组.
以下是从100,000个整数列表中删除所有偶数的时间:
| 归档时间: |
|
| 查看次数: |
10359 次 |
| 最近记录: |