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效果, 參考這篇。
留言
張貼留言