C#Linq unique不适用于列表

C#Linq unique不适用于列表,c#,linq,C#,Linq,我正在尝试使用以下代码检查列表是否包含重复数据: 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(All

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

    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;
}
内部类程序
{
私有静态void Main(字符串[]args)
{
var list=new list(){new Obj(){id=“1”,name=“1”},new Obj(){id=“1”,name=“1”};
Console.WriteLine(AllItemsAreUnique(列表));
}
公共静态文件(IEnumerable items)
{
返回items.Distinct().Count()==items.Count();
}
}
内部类Obj
{
公共字符串id;
公共字符串名称;
}
结果是真的!为什么?

为什么?

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


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

因为“具有相同属性的两个对象”并不意味着“两个相等的对象”,请参阅duplicate.Mmm。。。没有更简单的解决办法?非常简单:内部类Obj:IEquitable{public string id;public string name;public bool Equals(Obj other){reutrn id==other.id&&name==other.name;}}我省略了一些必要的代码:重写Equals(object)和GetHashCode()。然而,即使你不推翻它们,这也不是什么大问题。