C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C# List.Distinct() 去重

C# List.Distinct() 去重问题解决

作者:进阶的小木桩

本文主要介绍了C# List.Distinct() 去重问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在 C# 中,List.Distinct() 方法没有去重通常是因为以下原因。以下是详细解释和解决方案:

常见原因及解决方案

1.未正确使用返回值(未重新赋值)

2.自定义对象未实现相等比较

3.需要指定去重依据(匿名对象/LINQ)

完整代码示例

场景1:基本类型去重

var numbers = new List<int> { 1, 2, 2, 3 };
numbers = numbers.Distinct().ToList(); // 结果: [1, 2, 3]

场景2:自定义对象去重

// 方法1:重写Equals和GetHashCode
public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }

    public override bool Equals(object obj) => 
        obj is Person p && Id == p.Id && Name == p.Name;
    
    public override int GetHashCode() => 
        HashCode.Combine(Id, Name);
}

// 使用
var people = new List<Person>
{
    new Person { Id = 1, Name = "Alice" },
    new Person { Id = 1, Name = "Alice" } // 重复项
};
var distinctPeople = people.Distinct().ToList(); // 去重成功

场景3:使用DistinctBy(.NET 6+)

var distinctPeople = people
    .DistinctBy(p => new { p.Id, p.Name }) // 按多个属性去重
    .ToList();

场景4:使用自定义比较器

var distinctPeople = people
    .Distinct(new PersonComparer())
    .ToList();

关键总结

问题原因解决方案
未接收返回值用 .ToList() 转换结果并重新赋值
自定义对象未实现相等比较重写 Equals 和 GetHashCode 或使用 IEqualityComparer<T>
需按属性去重使用 .DistinctBy() (推荐) 或 GroupBy + First()

确保根据你的 .NET 版本和场景选择合适的方法!

到此这篇关于C# List.Distinct() 去重问题解决的文章就介绍到这了,更多相关C# List.Distinct() 去重内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文