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));
}
}
}