" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# List.Distinct() 去重問題解決

 更新時間:2026年01月28日 11:01:36   作者:進(jìn)階的小木樁  
本文主要介紹了C# List.Distinct() 去重問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在 C# 中,List.Distinct() 方法沒有去重通常是因為以下原因。以下是詳細(xì)解釋和解決方案:

常見原因及解決方案

1.未正確使用返回值(未重新賦值)

  • Distinct() 不會修改原列表,而是返回一個去重后的新序列。
  • 錯誤用法
    myList.Distinct(); // 未接收返回值,原列表不變
    
  • 正確用法
    myList = myList.Distinct().ToList(); // 轉(zhuǎn)換為List并重新賦值
    

2.自定義對象未實現(xiàn)相等比較

  • 如果列表元素是自定義類,Distinct() 默認(rèn)使用引用相等(比較內(nèi)存地址),而非屬性值。
  • 解決方法
    • 重寫 EqualsGetHashCode
      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);
      }
      
    • 或使用自定義比較器
      public class PersonComparer : IEqualityComparer<Person>
      {
          public bool Equals(Person x, Person y) => 
              x.Id == y.Id && x.Name == y.Name;
       
          public int GetHashCode(Person obj) => 
              HashCode.Combine(obj.Id, obj.Name);
      }
       
      // 使用比較器
      var distinctList = myList.Distinct(new PersonComparer()).ToList();
      

3.需要指定去重依據(jù)(匿名對象/LINQ)

  • 使用 DistinctBy (.NET 6+) 或通過 GroupBy 手動去重:
    • .NET 6+ 的 DistinctBy
      var distinctList = myList.DistinctBy(p => p.Id).ToList();
      
    • LINQ GroupBy
      var distinctList = myList
          .GroupBy(p => p.Id) // 按Id分組
          .Select(g => g.First()) // 取每組第一個
          .ToList();
      

完整代碼示例

場景1:基本類型去重

var numbers = new List<int> { 1, 2, 2, 3 };
numbers = numbers.Distinct().ToList(); // 結(jié)果: [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" } // 重復(fù)項
};
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();

關(guān)鍵總結(jié)

問題原因解決方案
未接收返回值用 .ToList() 轉(zhuǎn)換結(jié)果并重新賦值
自定義對象未實現(xiàn)相等比較重寫 Equals 和 GetHashCode 或使用 IEqualityComparer<T>
需按屬性去重使用 .DistinctBy() (推薦) 或 GroupBy + First()

確保根據(jù)你的 .NET 版本和場景選擇合適的方法!

到此這篇關(guān)于C# List.Distinct() 去重問題解決的文章就介紹到這了,更多相關(guān)C# List.Distinct() 去重內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

万宁市| 友谊县| 嵊泗县| 迁西县| 潼南县| 二手房| 华坪县| 伽师县| 望江县| 额尔古纳市| 南江县| 乳山市| 沾化县| 邛崃市| 介休市| 马龙县| 宝应县| 蒙阴县| 县级市| 桃园县| 嘉兴市| 囊谦县| 陇西县| 杨浦区| 江西省| 安新县| 巴彦淖尔市| 铜川市| 旬阳县| 邯郸市| 米脂县| 渝中区| 安丘市| 云林县| 京山县| 巴彦县| 陆川县| 南部县| 巴南区| 安远县| 镇赉县|