是的,C# 的 DistinctBy
方法可以處理自定義類型。DistinctBy
是 LINQ 擴展方法,它允許你根據指定的屬性或表達式對集合中的元素進行去重。為了使用 DistinctBy
處理自定義類型,你需要實現 IEquatable<T>
接口,并在你的自定義類中重寫 Equals
和 GetHashCode
方法。
以下是一個示例:
using System;
using System.Collections.Generic;
using System.Linq;
public class Person : IEquatable<Person>
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string name, int age)
{
Name = name;
Age = age;
}
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
return false;
Person person = (Person)obj;
return Age == person.Age && string.Equals(Name, person.Name);
}
public override int GetHashCode()
{
unchecked
{
int hash = 17;
hash = hash * 23 + (Name != null ? Name.GetHashCode() : 0);
hash = hash * 23 + Age;
return hash;
}
}
}
class Program
{
static void Main(string[] args)
{
List<Person> people = new List<Person>
{
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Alice", 30),
new Person("Charlie", 22)
};
var distinctPeople = people.DistinctBy(p => p.Name);
foreach (var person in distinctPeople)
{
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
}
在這個示例中,我們創建了一個 Person
類,實現了 IEquatable<Person>
接口,并重寫了 Equals
和 GetHashCode
方法。然后我們使用 DistinctBy
方法根據 Name
屬性對 people
列表進行去重。