• List<int>去重
  • List<string>去重
  • List<T>去重

1. List<int>去重

 List<int> ilist = new List<int>() { 1, 2, 3, 4, 2, 3 };
 ilist = ilist.Distinct().ToList();
 foreach (var item in ilist)
 {
    Console.WriteLine(item);
 }

2. List<string>去重

 List<string> strList = new List<string>() { "4", "4", "5", "6", "6" };
 strList = strList.Distinct().ToList();
 foreach (var item in strList)
 {
    Console.WriteLine(item);
 }

3. List<T>去重

 public class User
 {
   public int Id { get; set; }
   public string Name { get; set; }
 }

//去重类
 public class LambdaComparer<T> : IEqualityComparer<T>
 {
   private readonly Func<T, T, bool> _lambdaComparer;
   private readonly Func<T, int> _lambdaHash;
   public LambdaComparer(Func<T, T, bool> lambdaComparer)
   : this(lambdaComparer, EqualityComparer<T>.Default.GetHashCode)
   {
   }
   public LambdaComparer(Func<T, T, bool> lambdaComparer, Func<T, int> lambdaHash)
   {
      if (lambdaComparer == null)
         throw new ArgumentNullException("lambdaComparer");
      if (lambdaHash == null)
         throw new ArgumentNullException("lambdaHash");
       _lambdaComparer = lambdaComparer;
       _lambdaHash = lambdaHash;
   }

   public bool Equals(T x, T y)
   {
      return _lambdaComparer(x, y);
   }

   public int GetHashCode(T obj)
   {
      return _lambdaHash(obj);
   }
 }

//Main方法
 List<User> list = new List<User>()
 {
    new User() { Id = 1, Name = "张三" } ,
    new User() { Id = 1, Name = "张三" } ,
    new User() { Id = 3, Name = "李四" } ,
 };
 list = list.Distinct(new LambdaComparer<User>((a, b) => a.Id == b.Id && a.Name == b.Name, obj => obj.ToString().GetHashCode())).ToList();
 foreach (var item in list)
 {
    Console.WriteLine("Id:" + item.Id + ", Name:" + item.Name);
 }
01-03 13:30