在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方法可以根据指定的条件来去重,而不是比较对象本身。