Очень просто создать IComparer<T>
из Comparison<T>
- вот (слегка измененный) класс из MiscUtil , который вы можете использовать:
/// <summary>
/// Utility to build an IComparer implementation from a Comparison delegate,
/// and a static method to do the reverse.
/// </summary>
public class ComparisonComparer<T> : IComparer<T>
{
private readonly Comparison<T> comparison;
public ComparisonComparer(Comparison<T> comparison)
{
if (comparison == null)
{
throw new ArgumentNullException("comparison");
}
this.comparison = comparison;
}
public int Compare(T x, T y)
{
return comparison(x, y);
}
}
Вы также можете добавить метод расширения к List<T>
, чтобы сделать это для вас:
public static int BinarySearch<T>(this List<T> list, Comparison<T> comparison)
{
return list.BinarySearch(new ComparisonComparer(comparison));
}