从列表中删除重复项
从列表中删除重复项
我正在尝试从一个列表中删除重复的值,但是没有成功。我点击按钮来执行distinct函数,但最终的结果和输入相同。\n
Listclientes = new List ();
\nCliente.cs\n
namespace cadastroClientes { public class Cliente { public int ID { get; set; } public string Nome { get; set; } public string Email { get; set; } public bool Enviado { get; set; } public Cliente(int id, string nome, string email, bool enviado = false) { ID = id; Nome = nome; Email = email; Enviado = enviado; } public override string ToString() { return string.Format("{0}", Nome); } } }
\n删除重复项:\n
Listdistic = clientes.Distinct().ToList(); StringBuilder sb = new StringBuilder(); foreach (Cliente cliente in distic) { sb.AppendLine(cliente.Nome); } MessageBox.Show(sb.ToString());
在处理自定义数据类型的对象序列时,如果希望返回不重复的元素,需要在类中实现IEquatable泛型接口。下面的代码示例展示了如何在自定义数据类型中实现该接口,并提供GetHashCode和Equals方法。
public class CustomData : IEquatable{ public int Id { get; set; } public string Name { get; set; } public bool Equals(CustomData other) { if (other == null) return false; return this.Id == other.Id && this.Name == other.Name; } public override int GetHashCode() { return HashCode.Combine(this.Id, this.Name); } }
以上代码中的CustomData类实现了IEquatable
通过实现IEquatable接口,可以在处理自定义数据类型的对象序列时,使用Distinct方法或者使用LINQ查询来移除重复的元素。下面是一个使用Distinct方法的示例:
ListdataList = new List (); // 添加数据 dataList.Add(new CustomData { Id = 1, Name = "A" }); dataList.Add(new CustomData { Id = 2, Name = "B" }); dataList.Add(new CustomData { Id = 1, Name = "A" }); // 移除重复元素 List distinctList = dataList.Distinct().ToList();
在上述示例中,我们首先创建了一个包含重复元素的CustomData对象列表。然后,通过调用Distinct方法,移除了重复的元素,并将结果存储在distinctList列表中。
通过实现IEquatable接口并重写Equals和GetHashCode方法,可以在处理自定义数据类型的对象序列时,轻松地移除重复的元素。这样可以确保在进行后续操作时,不会出现重复数据的问题。