ListHelper.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace ShwasherSys
  7. {
  8. public static class ListHelper
  9. {
  10. /// <summary>
  11. /// 自定义Distinct扩展方法
  12. /// </summary>
  13. /// <typeparam name="T">要去重的对象类</typeparam>
  14. /// <typeparam name="C">自定义去重的字段类型</typeparam>
  15. /// <param name="source">要去重的对象</param>
  16. /// <param name="getField">获取自定义去重字段的委托</param>
  17. /// <returns></returns>
  18. public static IEnumerable<T> MyDistinct<T, C>(this IEnumerable<T> source, Func<T, C> getField)
  19. {
  20. return source.Distinct(new Compare<T, C>(getField));
  21. }
  22. }
  23. public class Compare<T, C> : IEqualityComparer<T>
  24. {
  25. private Func<T, C> GetField { get; set; }
  26. public Compare(Func<T, C> getField)
  27. {
  28. GetField = getField;
  29. }
  30. public bool Equals(T x, T y)
  31. {
  32. return EqualityComparer<C>.Default.Equals(GetField(x), GetField(y));
  33. }
  34. public int GetHashCode(T obj)
  35. {
  36. return EqualityComparer<C>.Default.GetHashCode(GetField(obj));
  37. }
  38. }
  39. }