在C#中,distinct方法可以用来对集合中的对象进行去重,它可以根据指定的条件来去重,而不是比较对象本身。
distinct方法的语法如下:
IEnumerableDistinct (IEnumerable source, IEqualityComparer comparer);
其中,source参数表示要去重的对象集合,comparer参数表示比较器,它是一个实现了IEqualityComparer
下面是一个使用distinct方法实现按条件对对象集合去重的示例:
class Program { static void Main(string[] args) { var list = new List{ new Student { ID = 1, Name = "Tom" }, new Student { ID = 2, Name = "Tom" }, new Student { ID = 3, Name = "Jim" }, new Student { ID = 4, Name = "Jim" }, new Student { ID = 5, Name = "Jim" }, }; // 去重,只保留Name相同的对象 var distinctList = list.Distinct(new StudentComparer()); foreach (var student in distinctList) { Console.WriteLine($"ID:{student.ID},Name:{student.Name}"); } Console.ReadKey(); } } public class Student { public int ID { get; set; } public string Name { get; set; } } public class StudentComparer : IEqualityComparer { public bool Equals(Student x, Student y) { return x.Name == y.Name; } public int GetHashCode(Student obj) { return obj.Name.GetHashCode(); } }
上面的示例中,使用distinct方法对Student对象集合进行去重,只保留Name相同的对象。为了指定distinct方法如何比较两个对象是否相等,我们实现了一个StudentComparer类,它实现了IEqualityComparer
运行上面的示例代码,可以看到distinct方法只保留了Name相同的对象,其他的对象都被去重了:
ID:1,Name:Tom ID:3,Name:Jim
从上面的示例代码可以看出,distinct方法可以根据指定的条件来去重,而不是比较对象本身。