using NCC.Dependency;
using System;
using System.Collections.Generic;
namespace NCC.Common.Helper
{
///
/// 比较器辅助类,用于快速创建接口的实例
///
///
/// 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));
}
}
}
}