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

68 .net c#

public struct stuff
{
    public int ID;
    public int quan;
}
Run Code Online (Sandbox Code Playgroud)

我想删除一个ID= 1 的产品.我正在尝试这个:

prods.Remove(new stuff{ prodID = 1});
Run Code Online (Sandbox Code Playgroud)

它不起作用.

谢谢大家

Nol*_*rin 172

如果您的集合类型是a List<stuff>,那么最好的方法可能如下:

prods.RemoveAll(s => s.ID == 1)
Run Code Online (Sandbox Code Playgroud)

这只对列表进行一次传递(迭代),因此应该比其他方法更有效.

如果您的类型更通用ICollection<T>,那么如果您关心性能,可能有助于编写一个简短的扩展方法.如果没有,那么你可能会使用LINQ(调用WhereSingle).

  • 有人可以将此答案标记为正确吗? (14认同)
  • 无法接受此答案,因为IList没有RemoveAll.主题启动器未指定他/她拥有的内容:List <T>或IList <T>. (4认同)
  • "不能"?哈哈.不要迂腐.即使作者正在与IList合作,RemoveAll也很容易实现. (3认同)

tan*_*ius 51

使用linq:

prods.Remove( prods.Single( s => s.ID == 1 ) );
Run Code Online (Sandbox Code Playgroud)

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

编辑:
既然stuff是一个结构,SingleOrDefault()不会返回null.但它将返回默认值(stuff),其ID为0.如果您的普通 stuff-object 没有ID为0,则可以查询此ID:

var stuffToRemove = prods.SingleOrDefault( s => s.ID == 1 )
if( stuffToRemove.ID != 0 )
{
    prods.Remove( stuffToRemove );
}
Run Code Online (Sandbox Code Playgroud)

  • @Graphain:我为你添加了一个例子 (2认同)

Nat*_*n W 7

如果你有 LINQ:

var itemtoremove = prods.Where(item => item.ID == 1).First();
prods.Remove(itemtoremove)
Run Code Online (Sandbox Code Playgroud)

  • 或者您可以将“Where”替换为“First” (3认同)