List<T>.BinarySearch
не принимает делегата, но имеет перегрузку , которая принимает IComparer<T>
.Используйте эту перегрузку с соответствующим пользовательским компаратором (CarByOwnerComparer : IComparer<Car>
), чтобы заставить его искать, как вы хотите.Конечно, имейте в виду, что список должен быть уже отсортирован с помощью этого компаратора, чтобы позволить двоичному поиску работать.Если вы предпочитаете написание делегата (например, через лямбду) реализации интерфейса, рассмотрите возможность использования преобразователя, который может переводить между ними, например, ProjectionComparer
, предоставленного здесь.
ОднакоЯ бы посоветовал вам использовать более подходящий класс коллекции, который обеспечивает быстрый поиск по ключу.Например, SortedList<,>
и SortedDictionary<,>
будут выполнять работу в O(logn)
.Если заказ не является истинным требованием, возможно, будет гораздо проще просто набрать Dictionary<,>
.