C# 查看项是否在可枚举(Linq)中存在一次

C# 查看项是否在可枚举(Linq)中存在一次,c#,linq,C#,Linq,给我一张单子 class Item { public Name { get; set; } } List<Item> items = new List<Item> { new Item() { Name = "Item 1" }, new Item() { Name = "Item 1" }, new Item() { Name = "Item 2" }, new Item() { Name = "Item 3" } } List<It

给我一张单子

class Item
{
 public Name
 {
   get;
   set;
 }
}

List<Item> items = new List<Item>
{
 new Item() { Name = "Item 1" },
 new Item() { Name = "Item 1" },
 new Item() { Name = "Item 2" },
 new Item() { Name = "Item 3" }
}

List<Item> listing = new List<Item>
{
 new Item() { Name = "Item 1" },
 new Item() { Name = "Item 2" },
 new Item() { Name = "Item 3" }
 new Item() { Name = "Item 4" }
}
类项目
{
公共名称
{
得到;
设置
}
}
列表项=新列表
{
新项(){Name=“Item 1”},
新项(){Name=“Item 1”},
新项(){Name=“Item 2”},
新项目(){Name=“项目3”}
}
列表=新列表
{
新项(){Name=“Item 1”},
新项(){Name=“Item 2”},
新项目(){Name=“项目3”}
新项目(){Name=“项目4”}
}
等等


我需要创建第三个数组来抵消两个实例之间的双实例;但是,具有“名称1”的项目都是相同的,但不同的“实例”。所以第三个列表应该有一个Item 1的实例,因为“items”有两个实例。关于如何通过Linq实现这一点,您有什么想法吗?

首先,您需要为
创建一个
EqualityComparer

public sealed class ItemEqualityComparer : EqualityComparer<Item>
{
    public override bool Equals(Item x, Item y)
    {
        return x.Name.CompareTo(y.Name) == 0;
    }

    public override int GetHashCode(Item obj)
    {
        return obj.Name.GetHashCode();
    }
}

首先,您需要为
创建一个
均衡比较程序

public sealed class ItemEqualityComparer : EqualityComparer<Item>
{
    public override bool Equals(Item x, Item y)
    {
        return x.Name.CompareTo(y.Name) == 0;
    }

    public override int GetHashCode(Item obj)
    {
        return obj.Name.GetHashCode();
    }
}

你能准确地包含你期望输出列表是什么吗?你能准确地包含你期望输出列表是什么吗?我不确定,但我认为OP想要的东西更像是一个集合差异(
除了
),而不是一个
联合
。这不是我遇到的具体问题,但它非常有用,解决了问题的另一部分。我将以更具体的方式开始另一个问题,我将在这一个问题中编辑我的措辞,以与答案相关;因为它仍然有用。我不确定,但我认为OP想要的东西更像是一个集差(
除外
),而不是一个
联合
。这不是我遇到的具体问题,但它非常有用,解决了问题的另一部分。我将以更具体的方式开始另一个问题,我将在这一个问题中编辑我的措辞,以与答案相关;因为它仍然有用。