#c# #linq #sorting #collections #ienumerable
#c# #linq #сортировка #Коллекции #ienumerable
Вопрос:
Я знаю, что могу отсортировать список, делая что-то вроде этого
var result = List<T>.OrderBy(value => value.property);
Но допустим, у меня есть что-то вроде этого
class Stock
{
public Guid ID { get; set; }
public string Description { get; set; }
}
class StockList : List<Stock>
{
public enum SomeEnum
{
SomeOtherValue = 0,
SomeOtherOtherValue
}
//What if I want method like this using LINQ?
public void Sort(SomeEnum sortBy)
{
switch (sortBy)
{
case SomeValue.SomeOtherOtherValue:
//Sort one way
break;
case SomeValue.SomeOtherValue:
//Sort another
break;
}
}
}
this.OrderBy()
(и я предполагаю, что другие расширения LINQ) возвращают OrderedCollection и, похоже, не влияют на оригинал. Итак, я предполагаю, что я иду по этому неправильному пути?
Комментарии:
1. Обратите внимание, что когда вы это делаете
List<T>.OrderBY(...)
, вы не сортируете список, вы возвращаете перечислимое, которое будет перечисляться по списку по порядку. т. е. список не выполняется (как вы обнаружили).
Ответ №1:
Вы можете использовать List.Sort( ). Это позволит выполнить сортировку списка на месте.
Ответ №2:
Вы можете сделать
this.Sort(new Comparison<Stock>((x,y) => x.Description.CompareTo(y.Description)));