根据条件从列表中删除项目

public struct stuff { public int ID; public int quan; } 

我想删除ID = 1的产品。目前我正在尝试:

 prods.Remove(new stuff{ prodID = 1}); 

它不工作。

谢谢大家

使用linq:

 prods.Remove( prods.Single( s => s.ID == 1 ) ); 

也许你甚至想使用SingleOrDefault()并检查元素是否存在…

编辑:
由于stuff是一个结构体, SingleOrDefault()不会返回null。 但是它会返回默认(东西) ,这将有一个ID为0.当你没有一个普通的东西对象的ID为0,你可以查询这个ID:

 var stuffToRemove = prods.SingleOrDefault( s => s.ID == 1 ) if( stuffToRemove.ID != 0 ) { prods.Remove( stuffToRemove ); } 

如果你的集合types是一个List<stuff> ,那么最好的方法可能是:

 prods.RemoveAll(s => s.ID == 1) 

这只是一个传递(迭代)的列表,所以应该比其他方法更有效率。

如果您的types更一般地是ICollection<T> ,那么如果您关心性能,可能会写一个简短的扩展方法。 如果没有,那么你可能会逃避使用LINQ(调用WhereSingle )。

如果你有LINQ:

 var itemtoremove = prods.Where(item => item.ID == 1).First(); prods.Remove(itemtoremove) 

prods.Remove(prods.Single(p=>p.ID == 1));

正如文森特所build议的那样,你不能按照习惯来修改collections

你可以使用Linq。

 var prod = from p in prods where p.ID != 1 select p; 

你只能删除你有参考的东西。 所以你将不得不search整个列表:

 stuff r; foreach(stuff s in prods) { if(s.ID == 1) { r = s; break; } } prods.Remove(r); 

要么

 for(int i = 0; i < prods.Length; i++) { if(prods[i].ID == 1) { prods.RemoveAt(i); break; } } 
 prods.Remove(prods.Find(x => x.ID == 1));