list class 属性都一样的3条数据 怎么distinct成一条数据

如果你有一个包含多个实例且属性值完全相同的类数据,并且想要将它们压缩为一条数据,你可以使用LINQ的`Distinct`方法结合自定义的`IEqualityComparer`来实现。下面是一个示例代码:```csharp

using System;
using System.Collections.Generic;
using System.Linq;

public class MyClass
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    
    // 自定义的相等比较器
    public class MyClassEqualityComparer : IEqualityComparer<MyClass>
    {
        public bool Equals(MyClass x, MyClass y)
        {
            return x.Id == y.Id && x.Name == y.Name && x.Description == y.Description;
        }

        public int GetHashCode(MyClass obj)
        {
            return obj.Id.GetHashCode() ^ obj.Name.GetHashCode() ^ obj.Description.GetHashCode();
        }
    }
}

public class Program
{
    public static void Main()
    {
        List<MyClass> myList = new List<MyClass>
        {
            new MyClass { Id = 1, Name = "A", Description = "Description 1" },
            new MyClass { Id = 1, Name = "A", Description = "Description 1" },
            new MyClass { Id = 1, Name = "A", Description = "Description 1" }
        };

        List<MyClass> distinctData = myList
            .Distinct(new MyClass.MyClassEqualityComparer())
            .ToList();

        foreach (MyClass item in distinctData)
        {
            Console.WriteLine($"Id: {item.Id}, Name: {item.Name}, Description: {item.Description}");
        }
    }
}


```

在上面的示例中,我们首先定义了一个`MyClass`类作为示例类,并在类内部定义了一个内部类`MyClassEqualityComparer`,该类实现了`IEqualityComparer<MyClass>`接口。在该自定义的相等比较器中,我们根据`Id`、`Name`和`Description`属性来判断两个`MyClass`对象是否相等。

然后,我们创建了一个包含三个属性完全相同的`MyClass`实例的`List<MyClass>`。

使用LINQ的`Distinct`方法,我们传入了自定义的相等比较器`MyClassEqualityComparer`,以确保只保留属性完全相同的唯一实例。最后,我们将结果转换为`List<MyClass>`类型。

在循环中,我们打印了压缩后的唯一实例的属性值。由于输入的三个实例具有相同的属性值,输出结果将是:

```
Id: 1, Name: A, Description: Description 1
```

这样,我们将具有相同属性值的三个实例压缩成了一个实例。请注意,这种方法仅适用于完全相同的属性值。如果属性值有细微的差异,此方法将不起作用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值