using NCC.Dependency; using System; using System.Collections.Generic; namespace NCC.Common.Helper { /// /// 相等比较辅助类,用于快速创建的实例 /// /// /// var equalityComparer1 = EqualityHelper[Person].CreateComparer(p => p.ID); /// var equalityComparer2 = EqualityHelper[Person].CreateComparer(p => p.Name); /// var equalityComparer3 = EqualityHelper[Person].CreateComparer(p => p.Birthday.Year); /// /// [SuppressSniffer] public static class EqualityHelper { /// /// 创建指定对比委托的实例 /// public static IEqualityComparer CreateComparer(Func keySelector) { return new CommonEqualityComparer(keySelector); } /// /// 创建指定对比委托与结果二次比较器的实例 /// public static IEqualityComparer CreateComparer(Func keySelector, IEqualityComparer comparer) { return new CommonEqualityComparer(keySelector, comparer); } private class CommonEqualityComparer : IEqualityComparer { private readonly IEqualityComparer _comparer; private readonly Func _keySelector; public CommonEqualityComparer(Func keySelector, IEqualityComparer comparer) { _keySelector = keySelector; _comparer = comparer; } public CommonEqualityComparer(Func keySelector) : this(keySelector, EqualityComparer.Default) { } public bool Equals(T x, T y) { return _comparer.Equals(_keySelector(x), _keySelector(y)); } public int GetHashCode(T obj) { return _comparer.GetHashCode(_keySelector(obj)); } } } }