gpt4 book ai didi

c# - 如果我不能直接修改类,如何使用元素类型的字段值从另一个列表中删除一个列表?

转载 作者:太空宇宙 更新时间:2023-11-03 19:05:47 24 4
gpt4 key购买 nike

假设我有一个 List<Product>名为 big一些对象 Product其中有 2 个字段,IDName .该列表已完全填充,这意味着每个元素的两个字段都不是 null ,尽管它们可以。

我还有一个 List<Product> ,比第一个小,名为small , 但这次字段 Namenull对于某些元素,同时 ID始终存在。

我想删除 small来自 big其中 ID是一样的。

例子:

List<Product> big = { {1,A},{2,B},{3,C},{4,D} };
List<Product> small = { {1,null},{3,C} };
List<Product> result = { {2,B},{4,D}};

我无法修改 Product对象,即我无法实现 IEquatable<Product> ,并且未实现此类接口(interface),这意味着 big.Except(small)big.RemoveAll(small)big.Contains(anElementOfSmall)行不通(为了这个问题,我试过了)。

我想避免带有迭代器删除或类似操作的双循环,我正在搜索具有特定谓词的内置函数。

最佳答案

实现 IEqualityComparer对于您的产品,它根据 ID 比较两个 Product。然后只需使用 Except 并传递比较器:

var result = big.Except(small, new ProductComparer()).ToList();

关于c# - 如果我不能直接修改类,如何使用元素类型的字段值从另一个列表中删除一个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27944327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com