removeitemsfromlist1thatarenotinlist2varlist=新列表{1,2,2,4,5};varlist2=新列表{4,5};//删除所有不在List2中的列表项//新列表应该包含{4,5}//lambda表达式是Predicate.list.RemoveAll(item=>item./*此处的解决方案表达式*/);//显示结果.foreach(intiinlist){Console.WriteLine(i);您可以使用Contains通过RemoveAll执行此操作:list.RemoveAll(item=>!list2.Contains(item));或者,如果您只想要交集,使用Enumerable.Intersect会更高效:list=list.Intersect(list2).ToList();不同之处在于,在后一种情况下您不会得到重复的条目。例如,如果list2包含2,在第一种情况下您将得到{2,2,4,5},在第二种情况下您将得到{2,4,5}。此问题已标记为已回答,但存在问题。如果列表包含对象而不是标量,则需要更多工作。我已经尝试过使用Remove()和RemoveAt()以及各种各样的东西,但它们都不起作用。我什至无法让Contains()工作。没有匹配任何我被难住的东西,直到我怀疑它可能没有正确匹配项目。当我意识到这一点时,我重构了项目类以实现IEquatable,它开始工作了。这是我的解决方案:classGenericLookupE:IEquatable{publicstringID{get;放;}publicboolEquals(GenericLookupEother){if(this.ID==other.ID)returntrue;返回假;在我这样做之后,ReedCopsey上面的RemoveAll()答案非常适合我。请参阅:http://msdn.microsoft.com/en-us/library/bhkz42b3.aspxlist=list.Except(list2).ToList();比holla更容易解决对象问题:如果您的列表包含对象而不是标量,则通过删除对象的选定属性:以上是C#学习教程:从列表1中删除不在列表2中的项目更多关于C#学习教程,希望大家多多关注——vara=allActivePatientContracts.RemoveAll(x=>!allPatients.Select(y=>y.Id).Contains(x.PatientId));本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
