C# List Distinct寫法

若List裡為值類型(Value Type Calss), 只需要使用下列語法, 就可以取得唯一清單

  1. List<string> aList = dataList.Distinct().ToList();

但若List裡面是放一個Class, 而且有多個屬性, 就需要額外加工一下, 才能真正取得唯一清單, 否則執行完上述語法後, 雖然不會錯誤, 但也沒效果。

需要在Class裡新增下列方法

  • public override bool Equals(object obj)
  • public override int GetHashCode()

程式可以參考如下,

  1. public Class ClassA
  2. {
  3. public string A { get; set; }
  4. public string B { get; set; }
  5.  
  6. public override bool Equals(object obj)
  7. {
  8. // 如果傳入的物件是null,返回false
  9. if (obj == null)
  10. return false;
  11.  
  12. // 如果傳入的對象不是 ClassA 類型,返回false
  13. if (!(obj is ClassA))
  14. return false;
  15.  
  16. // 將傳入的對象轉換為 ClassA 類型
  17. ClassA other = (ClassA)obj;
  18.  
  19. // 根據需要比較 ClassA 的屬性,這裡比較A和B屬性
  20. return A == other.A && B == other.B;
  21. }
  22.  
  23. public override int GetHashCode()
  24. {
  25. // 使用性的HashCode來生成物件的HashCode
  26. return (A.GetHashCode()) ^ (B.GetHashCode());
  27. }
  28. }

有了以上程式後, 再使用List.Distinct()時, 就有作用了。

20231117 : 透過Group...first也可以達到Distinct效果, 參考這篇





















留言

這個網誌中的熱門文章

ORA-12514: TNS: 監聽器目前不知道連線描述區中要求的服務

Oracle 工作排程 DBMS_JOB 筆記

Oracle 例外控制(Exception Control)