从列表中删除重复项

29 浏览
0 Comments

从列表中删除重复项

我正在尝试从一个列表中删除重复的值,但是没有成功。我点击按钮来执行distinct函数,但最终的结果和输入相同。\n

List clientes = 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

List distic = clientes.Distinct().ToList();
StringBuilder sb = new StringBuilder();
foreach (Cliente cliente in distic)
{
   sb.AppendLine(cliente.Nome);
}
MessageBox.Show(sb.ToString());

0
0 Comments

在处理自定义数据类型的对象序列时,如果希望返回不重复的元素,需要在类中实现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接口,并重写了Equals和GetHashCode方法。Equals方法用于比较两个CustomData对象是否相等,而GetHashCode方法用于生成对象的哈希码。

通过实现IEquatable接口,可以在处理自定义数据类型的对象序列时,使用Distinct方法或者使用LINQ查询来移除重复的元素。下面是一个使用Distinct方法的示例:

List dataList = 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方法,可以在处理自定义数据类型的对象序列时,轻松地移除重复的元素。这样可以确保在进行后续操作时,不会出现重复数据的问题。

0