using JNPF.DependencyInjection; namespace JNPF.Common.Security; /// /// 比较器辅助类,用于快速创建接口的实例. /// /// /// var comparer1 = Comparison[Person].CreateComparer(p => p.ID); var comparer2 = Comparison[Person].CreateComparer(p => p.Name); var comparer3 = Comparison[Person].CreateComparer(p => p.Birthday.Year). /// /// 要比较的类型. [SuppressSniffer] public static class ComparisonHelper { /// /// 创建指定对比委托的实例. /// public static IComparer CreateComparer(Func keySelector) { return new CommonComparer(keySelector); } /// /// 创建指定对比委托与结果二次比较器的实例 /// public static IComparer CreateComparer(Func keySelector, IComparer comparer) { return new CommonComparer(keySelector, comparer); } /// /// 常见的比较器. /// /// 要比较的类型. private class CommonComparer : IComparer { private readonly IComparer _comparer; private readonly Func _keySelector; /// /// 构造函数. /// /// /// public CommonComparer(Func keySelector, IComparer comparer) { _keySelector = keySelector; _comparer = comparer; } /// /// 构造函数. /// /// public CommonComparer(Func keySelector) : this(keySelector, Comparer.Default) { } /// /// 比较. /// /// /// /// public int Compare(T? x, T? y) { return _comparer.Compare(_keySelector(x), _keySelector(y)); } } }