如果你有一个包含多个实例且属性值完全相同的类数据,并且想要将它们压缩为一条数据,你可以使用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
```
这样,我们将具有相同属性值的三个实例压缩成了一个实例。请注意,这种方法仅适用于完全相同的属性值。如果属性值有细微的差异,此方法将不起作用。