首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Porschev[钟慰]的专栏

    用泛型的IEqualityComparer接口去重复项

    我们可能经常用的是Distinct<TSource>(IEnumerable<TSource>) 用它对数组这一类去重复 这里要用Distinct<TSource>(IEnumerable<TSource>, IEqualityComparer <TSource>) 使用指定的 IEqualityComparer<T> 对值进行比较 一、先为数据做个实体类:User public class User { public User(int } public int Id { get; set; } public string Name { get; set; } } 二、再自定义一个User比较类(实现IEqualityComparer <T>接口):UserComparer public class UserComparer : IEqualityComparer<User> { #region IEqualityComparer public int GetHashCode(User obj) { return 0; } #endregion }  自定义一个比较类,去继承IEqualityComparer

    1.5K90发布于 2018-01-16
  • 来自专栏林德熙的博客

    dotnet 使用完全对象引用相等判断

    可以看到字典等的构造函数都有重载方法,要求传入 IEqualityComparer 接口,于是可以做如下实现 class ReferenceEqualsComparer<T> : ReferenceEqualsComparer , IEqualityComparer<T> { /// <inheritdoc /> public bool Equals(T x, T y) => ((IEqualityComparer public int GetHashCode(T obj) => obj.GetHashCode(); } class ReferenceEqualsComparer : IEqualityComparer { /// <inheritdoc /> bool IEqualityComparer.Equals(object x, object y) => ReferenceEquals

    60520发布于 2020-07-07
  • 来自专栏网络安全技术点滴分享

    C#记录类型与集合的深度解析:从默认行为到自定义比较

    虽然可以包装成实现IEqualityComparer<ImmutableList<T>>的类型,但我目前尚未这样做。遗憾的是,C#记录类型的工作方式无法为特定属性指定相等比较器。 因此,当创建ImmutableDictionary<Constituency, Result>时,我希望提供仅执行引用比较的IEqualityComparer<Constituency>。 更新:感谢Michael Damatov指出,框架中确实存在System.Collections.Generic.ReferenceEqualityComparer——但它实现的是非泛型的IEqualityComparer 我愚蠢地忽略了IEqualityComparer<T>的逆变特性:存在从IEqualityComparer<object>到任何类类型X的IEqualityComparer<X>的隐式引用转换。 功能需求总结总结来说,虽然我喜欢记录类型和不可变集合,但可以通过引入以下内容减少摩擦:控制生成代码中每个属性使用的相等比较器的方式不可变集合的相等比较器,能指定元素比较方式执行引用比较的IEqualityComparer

    15510编辑于 2025-08-14
  • 来自专栏跟着阿笨一起玩NET

    linq Distinct 去除重复数据

    public static IEnumerable<T> Distinct<T, V>(this IEnumerable<T> source, Func<T, V> keySelector, IEqualityComparer using System.Runtime.CompilerServices; using System.Linq; public class CommonEqualityComparer<T, V> : IEqualityComparer <T> { private Func<T, V> keySelector; private IEqualityComparer<V> comparer; public CommonEqualityComparer (Func<T, V> keySelector, IEqualityComparer<V> comparer) { this.keySelector = keySelector;

    3.4K20发布于 2018-09-20
  • 来自专栏C# 编程

    [C#] LINQ之Join与GroupJoin

    outerKeySelector, Func<TInner, TKey> innerKeySelector, Func<TOuter, TInner, TResult> resultSelector, IEqualityComparer 使用指定的IEqualityComparer<TKey> 对键进行比较。 以上与Join第一种方法无非就是多一个IEqualityComparer<TKey>,如果使用一个继承于IEqualityComparer<TKey>的类初始化comparer,它就会使用该类对对TOuter.TKey outerKeySelector, Func<TInner, TKey> innerKeySelector, Func<TOuter, IEnumerable<TInner>, TResult> resultSelector, IEqualityComparer 使用指定的IEqualityComparer<TKey>对键进行比较。 这个与Join第二种方法类似,这里不再进行讲述。

    1.3K30发布于 2019-05-24
  • 来自专栏HueiFeng技术专栏

    C#中Equals和GetHashCode

    IEqualityComparer实现 下面我们创建一个学生类,从而进一步的实现我们对象数据的对比 public class Student { public string Distinct<TSource>(IEnumerable<TSource>, IEqualityComparer<TSource>) 通过使用指定的 IEqualityComparer<T> 对值进行比较 comparer IEqualityComparer<TSource> 用于比较值的 IEqualityComparer<T>。

    94010发布于 2020-01-31
  • 来自专栏技术之路

    Linq 和DefaultView两种方法去掉DataTable 里的重复行

    .ToString()); }); Console.WriteLine(); 先用Linq的Distinct方法实现,因为每行有好多列,要实现IEqualityComparer <T>接口 public class DataTableRowCompare : IEqualityComparer<DataRow> { #region IEqualityComparer }); Console.ReadLine(); } } public class DataTableRowCompare : IEqualityComparer <DataRow> { #region IEqualityComparer<DataRow> 成员 public bool Equals(DataRow x,

    1.9K60发布于 2018-01-31
  • 来自专栏DotNet NB && CloudNative

    dotnet 10 LINQ LeftJoin & RightJoin

    , TResult> resultSelector, IEqualityComparer<TKey>? , TInner, TResult> resultSelector, IEqualityComparer<TKey>? , TResult>> resultSelector, IEqualityComparer<TKey>? , TInner, TResult>> resultSelector, IEqualityComparer<TKey>?

    28610编辑于 2025-04-18
  • 来自专栏HueiFeng技术专栏

    C#中Equals和GetHashCode

    IEqualityComparer实现 下面我们创建一个学生类,从而进一步的实现我们对象数据的对比 public class Student { public string Distinct<TSource>(IEnumerable<TSource>, IEqualityComparer<TSource>) 通过使用指定的 IEqualityComparer<T> 对值进行比较 comparer IEqualityComparer<TSource> 用于比较值的 IEqualityComparer<T>。

    80820发布于 2020-02-24
  • 来自专栏Unity3d程序开发

    c# list 去重复

    针对对象中的某个字段只能用Distinct(IEqualityComparer<T>) using System; using System.Collections.Generic; using System.Linq class StrItem { public int id; public int num; } public class Comparint : IEqualityComparer

    70020编辑于 2023-08-24
  • 来自专栏张善友的专栏

    XML Serializable Generic Dictionary

    dictionary):base(dictionary)         {         }                            public SerializableDictionary(IEqualityComparer capacity):base(capacity)         {         }                public SerializableDictionary(int capacity, IEqualityComparer

    947100发布于 2018-01-29
  • 来自专栏圣杰的专栏

    TempData知多少

    dictionary; } } return (IDictionary<string, object>) new Dictionary<string, object>((IEqualityComparer new Dictionary<string, object>(dictionary, (IEqualityComparer<string>) StringComparer.OrdinalIgnoreCase ) : new Dictionary<string, object>((IEqualityComparer<string>) StringComparer.OrdinalIgnoreCase); _data.Keys, (IEqualityComparer<string>) StringComparer.OrdinalIgnoreCase); this.

    1.4K80发布于 2018-01-11
  • 来自专栏c#分享专栏

    c#使用自定义的比较器和循环遍历去重

    自定义比较器的基本概念在C#中,自定义比较器通常通过实现IComparer<T>或IEqualityComparer<T>接口来实现。 IEqualityComparer<T>接口IEqualityComparer<T>接口用于定义对象的相等性比较逻辑,它包含两个方法:Equals和GetHashCode。

    4.9K00编辑于 2024-10-10
  • [C#]C# List去重的三种方法

            }     } 述扩展方法即可去重,如下:  var  list2 = list.Distinct(d => new { d.Age, d.Name }).ToList(); 第三种 IEqualityComparer source.Distinct(new DynamicEqualityComparer<T>(comparer));     private sealed class DynamicEqualityComparer<T> : IEqualityComparer

    34110编辑于 2025-07-17
  • 来自专栏DotNet 致知

    LINQ之方法语法

    var a = vs.Contains(2);//true 它还有一个重载方法 Contains(T t,IEqualityComparer<T> e),第二个参数用于自定义比较的规则,因为有的时候系统的直接比较法不是我们想要的 所以就需要我们自定义比较规则,这个可以展开来解释一下:它的第二个参数是一个接口,接口里边定义了一个Equals()方法,我们需要自定义一个类实现这个接口,请看代码: public class MyClass : IEqualityComparer var a = vs.OrderBy(c => c);//运行结果 12356 下面我使用它的重载降序排序数据 public class MyClass : IEqualityComparer<int

    1.5K20编辑于 2022-03-29
  • 来自专栏不做码农的开发者

    C# 基础知识系列-7 Linq详解

    //传入相等性比较器的 public static bool Contains<TSource> (this IEnumerable<TSource> source, TSource value, IEqualityComparer public class StudentEqualityCompare: IEqualityComparer<Student> { public bool Equals(Student x, Student IEnumerable<TSource> Union<TSource> (this IEnumerable<TSource> first, IEnumerable<TSource> second, IEqualityComparer comparerIEqualityComparer 用于对键进行哈希处理和比较的 IEqualityComparer。 </touter,ienumerable comparer IEqualityComparer 用于对键进行哈希处理和比较的 IEqualityComparer

    2.8K50发布于 2020-04-29
  • 来自专栏C# 编程

    [C#] LINQ之GroupBy

    TSource>> GroupBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer "Female", } }; 其次,增加一个相等比较器类,用于对Person进行分组: class PersonEqualityComparer : IEqualityComparer public int GetHashCode(Person obj) => obj.Name.GetHashCode(); } 其中定义了如何对一个Person相等性定义,只要实现IEqualityComparer source, Func<TSource, TKey> keySelector, Func<TKey, IEnumerable<TSource>, TResult> resultSelector, IEqualityComparer Func<TSource, TElement> elementSelector, Func<TKey, IEnumerable<TElement>, TResult> resultSelector, IEqualityComparer

    2.4K30发布于 2019-05-24
  • 来自专栏c#分享专栏

    c#使用Linq的Distinct()方法去重

    该方法使用IEqualityComparer<T>默认比较器来确定元素是否相等。对于值类型,这通常是基于值的比较;而对于引用类型,则是基于引用的比较。 例如,对于大型对象,可以根据对象的特定属性来实现IEqualityComparer<T>接口。延迟执行:LINQ查询是延迟执行的,这意味着实际的去重操作会在遍历结果序列时才执行。

    5.1K00编辑于 2024-10-10
  • 来自专栏码农阿宇

    ConsurrentDictionary并发字典知多少?

    线程锁 internal volatile int[] m_countPerLock; //索格锁所管理的数据数量 internal readonly IEqualityComparer //构造函数 internal Tables(Node[] buckets, object[] locks, int[] countPerlock, IEqualityComparer > internal ConcurrentDictionaryMini(int concurrencyLevel, int capacity, bool growLockArray, IEqualityComparer Tables tables = m_tables; IEqualityComparer<TKey> comparer = tables.m_comparer; { while (true) { Tables tables = m_tables; IEqualityComparer

    1.1K20发布于 2019-03-20
  • 来自专栏C# 编程

    [C#] LINQ之LookUp

    TSource> ToLookup<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, IEqualityComparer

    2.2K30发布于 2019-05-24
领券