2013-05-30 3 views
-1

Теперь я использую OrderByDescending для сортировки элементов коллекции IEnumerable, и все, что я делаю, присваивает обратно той же коллекции.Тип ссылки OrderByDescending

this.InputParts = 
    this.InputParts.OrderByDescending(lazy => lazy.Metadata.Priority); 

Из сообщения msdn, похоже, что у него есть отложенный объект возврата. (У него есть возвращаемое значение, что-то вроде того, что я представляю как пропуск по значению, скажем, в C++)

Я думаю, должно быть что-то, что может выполнять сортировку ссылочного типа.

Скажем, вместо

this.InputParts = 
    this.InputParts.OrderByDescending(lazy => lazy.Metadata.Priority); 

мы просто говорим,

//shall itself reorder the collection! 
this.InputParts.SomeMSDNFunction(lazy => lazy.Metadata.Priority); 

(я предполагаю, назначая в тот же самый список может вызвать проблемы с производительностью. Кстати, я только предполагаю!)

+2

И вопрос в том, что? –

+0

@AdamHouldsworth: Что это за функция, которая может сортировать по ссылке? что «SomeMSDNFunction» .. –

+0

Какой тип 'this.InputParts'? – Dennis

ответ

1

Если тип InputParts - это своего рода сбор материалов, такой как List<T> или массив, такие функции, как вы описываете doexist; они меняют порядок сбора на месте при вызове.

В более общем случае, если она просто IEnumerable<T> нет никакой возможности «навести порядок» на экземпляр перечислимого объекта, поскольку это потребует замены кода, который производит перечисление. Так как это очевидно неосуществимо, единственное, что вы можете сделать: оберните свой собственный код сортировки вокруг него, что и делает LINQ. Результат работает как в ваших первоначальных примерах (новый экземпляр возвращается, и что-то накладывает порядок сортировки).

+0

спасибо .. так что, как вы говорите, единственный вариант - создать новый экземпляр объекта, который сортируется с помощью LINQ .. –

Смежные вопросы