C# Linq 唯一不适用于列表

本文关键字:适用于 列表 不适用 唯一 Linq | 更新日期: 2023-09-27 18:32:02

我正在尝试使用以下代码来检查列表是否包含重复的数据:

    internal class Program
{
    private static void Main(string[] args)
    {
        var list = new List<Obj>() { new Obj() { id = "1", name = "1" }, new Obj() { id = "1", name = "1" } };
        Console.WriteLine(AllItemsAreUnique(list));
    }
    public static bool AllItemsAreUnique<T>(IEnumerable<T> items)
    {
        return items.Distinct().Count() == items.Count();
    }
}
internal class Obj
{
    public string id;
    public string name;
}

结果是真的!为什么?

C# Linq 唯一不适用于列表

为什么?

默认情况下,比较将使用引用,在这种情况下,两个对象引用并不相同。

您需要实现IEquatable<T>以提供特定于类型的Equals()方法供Distinct()使用。