2016-01-27 50 views
-2

我用下面的代碼嘗試檢查如果列表包含重複的數據不起作用: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(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; 
} 

,結果是真的!爲什麼?

+4

因爲「具有相同屬性的兩個對象」並不意味着「兩個相等的對象」,請參見重複。 – CodeCaster

回答

2

爲什麼?

默認情況下,比較將使用引用,在這種情況下,兩個對象引用不相同。

您需要實施IEquatable<T>才能爲Distinct()提供特定類型的Equals()方法。

+0

嗯...有沒有easiersolution?謝謝。 –

+0

相當容易: 內部類Obj:IEquitable { public string id; 公共字符串名稱; public bool Equals(Obj other) { reutrn id == other.id && name == other.name; } } 我省略了一些必要的代碼:覆蓋Equals(object)和GetHashCode()。但是,即使您不覆蓋它們也不會有什麼大問題。 –