C# 如何实现列表。针对两个不同的对象列表删除?
我有两个列表:C# 如何实现列表。针对两个不同的对象列表删除?,c#,list,C#,List,我有两个列表:ListA和ListB 对象的结构: 对象A:-commonID,AName 对象B:-commonID,BName 现在我的目标非常简单,我正在尝试删除ListA中与ListB中具有相同commonID的所有项目。以下是我尝试过的: foreach(var item in ListB) ListA.Remove(x=>x.commonID == item.commonID) 它引发异常: Cannot convert lambda expression to ty
ListA
和ListB
对象的结构:对象A:-commonID,AName
对象B:-commonID,BName
现在我的目标非常简单,我正在尝试删除
ListA
中与ListB
中具有相同commonID
的所有项目。以下是我尝试过的:
foreach(var item in ListB)
ListA.Remove(x=>x.commonID == item.commonID)
它引发异常:
Cannot convert lambda expression to type 'A' because it is not a delegate type
我可以知道我做错了哪一部分吗?您当前使用的是(需要删除单个项)而不是(需要谓词)
但是,更好的方法可能是创建一组要删除的所有ID,然后使用单个调用RemoveAll
:
HashSet<string> idsToRemove = new HashSet<string>(ListB.Select(x => x.commonID));
ListA.RemoveAll(x => idsToRemove.Contains(x.commonID));
您当前使用的是(需要删除单个项)而不是(需要谓词)
但是,更好的方法可能是创建一组要删除的所有ID,然后使用单个调用RemoveAll
:
HashSet<string> idsToRemove = new HashSet<string>(ListB.Select(x => x.commonID));
ListA.RemoveAll(x => idsToRemove.Contains(x.commonID));
Remove方法不接受谓词,而是接受实际项。因此,错误消息意味着lambda表达式无法转换为A类型的预期项 采用谓词:
ListA.RemoveAll(item => ListB.Any(x => x.CommonId == item.CommonID));
现在您甚至不需要外部循环。Remove方法不接受谓词,而是实际的项。因此,错误消息意味着lambda表达式无法转换为A类型的预期项 采用谓词:
ListA.RemoveAll(item => ListB.Any(x => x.CommonId == item.CommonID));
现在,您甚至不需要外部循环。Contains不接受委托parameter@SriramSakthivel你说得对,我把它改成了Any。Contains不接受委托parameter@SriramSakthivel你说得对,我把它改成了任何。