美文网首页
自定义扩展LINQ通用的Distinct规则

自定义扩展LINQ通用的Distinct规则

作者: 杰克_王_ | 来源:发表于2022-04-07 09:34 被阅读0次
    public class EqualityComparer<T, V> : IEqualityComparer<T>
      {
            private readonly Func<T, V> _selector;
    
            public EqualityComparer(Func<T, V> selector)
            {
                _selector = selector;
            }
    
            public bool Equals([AllowNull] T x, [AllowNull] T y)
            {
                return EqualityComparer<V>.Default.Equals(_selector(x), _selector(y));
            }
    
            public int GetHashCode([DisallowNull] T obj)
            {
                return EqualityComparer<V>.Default.GetHashCode(_selector(obj));
            }
        }
    
    public static class LinqExtentions
        {
            public static IEnumerable<T> Distinct<T, V>(this IEnumerable<T> source, Func<T, V> selector)
            {
                return source.Distinct(new EqualityComparer<T, V>(selector));
            }
        }
    
    public class Item
        {
            public int Id { get; set; }
            public string Name { get; set; }
        }
    
    ...
    
    IEnumerable<Item> items = new List<Item>();
    items = items.Distinct(x => x.Id);
    

    相关文章

      网友评论

          本文标题:自定义扩展LINQ通用的Distinct规则

          本文链接:https://www.haomeiwen.com/subject/hyyjsrtx.html