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效果, 參考這篇





















留言

這個網誌中的熱門文章

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

Oracle 例外控制(Exception Control)

Oracle 工作排程 DBMS_JOB 筆記