Я понятия не имею, что в вашем примере c.Sort()
, так как это может быть много вещей (вы имеете в виду List<T>.Sort()
?), Но одна вещь, в которой он уверен, - это LINQ. LINQ не имеет Sort()
- у него есть OrderBy()
.
Тем не менее, последний также работает с IComparer
, и нет возможности создать экземпляр анонимного класса, реализующего интерфейс «inline», поэтому вам нужно будет определить класс.
Для List<T>.Sort()
есть перегрузка, которая берет Comparison<T>
. Так как это тип делегата, вы можете использовать лямбда, чтобы обеспечить функцию инлайн:
List<int> xs = ...;
xs.Sort((x, y) => y - x); // reverse sort
Я не думаю, что это будет работать для IComparer, поскольку lamda должна возвращать int, а не bool. –
Вы правы. Это работает для IComparison, а не для IComparable. Проведите большую часть часа, пытаясь добиться чего-то подобного, чтобы работать с NUnit CollectionAssert.IsOrdered метод только для того, чтобы понять, что это не так. Вся документация и статьи сбивают с толку, поскольку они используют метод сортировки в качестве примера. У метода сортировки есть перегрузки, которые берут либо IComparer, и IComparison. Это работает только с методом сортировки из-за перегрузки IComparison. – Brett
@Brett Но в следующем .NET4.5 вы можете создать экземпляр 'IComparer <>' из 'IComparison <>' делегата, вызвав новый статический заводский метод 'Comparer <>. Create'. –