C# List Distinct寫法
若List裡為值類型(Value Type Calss), 只需要使用下列語法, 就可以取得唯一清單
- List<string> aList = dataList.Distinct().ToList();
但若List裡面是放一個Class, 而且有多個屬性, 就需要額外加工一下, 才能真正取得唯一清單, 否則執行完上述語法後, 雖然不會錯誤, 但也沒效果。
需要在Class裡新增下列方法
- public override bool Equals(object obj)
- public override int GetHashCode()
程式可以參考如下,
- public Class ClassA
- {
- public string A { get; set; }
- public string B { get; set; }
- public override bool Equals(object obj)
- {
- // 如果傳入的物件是null,返回false
- if (obj == null)
- return false;
- // 如果傳入的對象不是 ClassA 類型,返回false
- if (!(obj is ClassA))
- return false;
- // 將傳入的對象轉換為 ClassA 類型
- ClassA other = (ClassA)obj;
- // 根據需要比較 ClassA 的屬性,這裡比較A和B屬性
- return A == other.A && B == other.B;
- }
- public override int GetHashCode()
- {
- // 使用性的HashCode來生成物件的HashCode
- return (A.GetHashCode()) ^ (B.GetHashCode());
- }
- }
有了以上程式後, 再使用List.Distinct()時, 就有作用了。
20231117 : 透過Group...first也可以達到Distinct效果, 參考這篇。
留言
張貼留言