c#从列表中删除项目
我有一个列表存储在结果列表如下:
var resultlist = results.ToList(); 
看起来像这样
 ID FirstName LastName -- --------- -------- 1 Bill Smith 2 John Wilson 3 Doug Berg 
如何从列表中删除ID 2?
  List<T>有两种方法可以使用。 
如果您知道项目的索引,则可以使用RemoveAt(int index) 。 例如:
 resultlist.RemoveAt(1); 
或者你可以使用Remove(T item) :
 var itemToRemove = resultlist.Single(r => r.Id == 2); resultList.Remove(itemToRemove); 
 如果您不确定该项目是否存在,则可以使用SingleOrDefault 。 如果没有项目, SingleOrDefault将返回null ( Single会在找不到项目时抛出exception)。 当有重复的值时(两个具有相同id项目),两者都会抛出。 
 var itemToRemove = resultlist.SingleOrDefault(r => r.Id == 2); if (itemToRemove != null) resultList.Remove(itemToRemove); 
 resultList = results.Where(x=>x.Id != 2).ToList(); 
有一个我喜欢的Linq帮手,很容易实现,并且可以使用“where not”条件来查询:
 public static IEnumerable<T> ExceptWhere<T>(this IEnumerable<T> source, Predicate<T> predicate) { return source.Where(x=>!predicate(x)); } //usage in above situation resultList = results.ExceptWhere(x=>x.Id == 2).ToList(); 
 我认为使用.RemoveAll()更简单,因为您可以拥有要删除的项目ID列表 – 请参考以下示例。 
如果你有:
 class myClass { public int ID; public string FirstName; public string LastName; } 
 并将results赋值如下: 
 var results=new List<myClass> { new myClass() { ID=1, FirstName="Bill", LastName="Smith" }, new myClass() { ID=2, FirstName="John", LastName="Wilson" }, new myClass() { ID=3, FirstName="Doug", LastName="Berg" }, new myClass() { ID=4, FirstName="Bill", LastName="Wilson" }, }; 
然后,您可以定义要删除的ID列表:
 var removeList = new List<int>() { 2, 3 }; 
只需使用它来删除它们:
 results.RemoveAll(r => removeList.Any(a => a==r.ID)); 
 它将删除项目2和3,并保留项目1和项目4  – 如removeList所指定的。  请注意 ,这发生的地方,所以没有额外的assigment要求。 
当然,你也可以在单个项目上使用它,例如:
 results.RemoveAll(r => r.ID==4); 
在我们的例子中它将删除ID为4的Bill。
DotNetFiddle: 运行演示
 还有另一种方法。 它使用List.FindIndex和List.RemoveAt 。 
 虽然我可能会使用KeithS提供的解决scheme(只是简单的Where / ToList ),但这种方法的不同之处在于它会改变原始列表对象。 根据预期,这可能是一个好的(或不好的)“特征”。 
 在任何情况下, FindIndex (加上一个警卫)确保RemoveAt将是正确的,如果有空白的ID或sorting是错误的,等等,使用RemoveAt (vs Remove )避免了第二个 O(n)search名单。 
这是一个LINQPad片段:
 var list = new List<int> { 1, 3, 2 }; var index = list.FindIndex(i => i == 2); // like Where/Single if (index >= 0) { // ensure item found list.RemoveAt(index); } list.Dump(); // results -> 1, 3 
快乐的编码。
 您不指定什么样的列表,但通用List可以使用RemoveAt(index)方法或Remove(obj)方法: 
 // Remove(obj) var item = resultList.Single(x => x.Id == 2); resultList.Remove(item); // RemoveAt(index) resultList.RemoveAt(1); 
更简化:
 resultList.Remove(resultList.Single(x => x.Id == 2)); 
没有必要创build一个新的var对象。
  …或只是resultlist.RemoveAt(1)如果你确切地知道索引。