可以说我有一个自定义类:

public class WineCellar
{

    public string year;
    public string wine;
    public double nrbottles;
}

可以说我现在有一个此自定义类的列表:
List<WineCellar> orignialwinecellar = List<WineCellar>();

包含以下项目:
2012 Chianti 12

2011 Chianti 6

2012 Chardonay 12

2011 Chardonay 6

我知道如果我想比较两个列表并返回一个仅包含不在另一个列表中的项目的新列表,我会这样做:
var newlist = list1.Except(list2);

如何将其扩展到自定义类?可以说我有:
string[] exceptionwinelist = {"Chardonay", "Riesling"};

我希望将其退回:
List<WineCellar> result = originalwinecellar.wine.Except(exceptionwinelist);

该伪代码显然无法正常工作,但希望可以说明我要执行的操作。然后,此应返回具有以下项目的自定义类酒窖的列表:

2012基安蒂12

2011基安蒂6

谢谢。

最佳答案

您实际上并不想在这里使用Except,因为您没有将WineCellar对象用作黑名单的集合。您所拥有的是规则的集合:“我不想要带有这样和那样的葡萄酒名称的对象”。

因此,最好只使用Where:

List<WineCellar> result = originalwinecellar
    .Where(w => !exceptionwinelist.Contains(w.wine))
    .ToList();

以人类可读的形式:



顺便说一句,WineCellar类名有点误导。这些物品不是地窖,而是库存物品。

关于c# - List.except自定义类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17782733/

10-11 16:55