2013-07-29 2 views
2

Я вставил объект EntityList EventData в обычный список и теперь хочу его отменить. Но это дает ошибку «Не удается неявно преобразовать тип„пустоты“на" объект»Обратный список C#

List<Entities.Notification> ProgramList = EventData.ToList(); 
ListViewEvents.DataSource = ProgramList.Reverse(); 
ListViewEvents.DataBind(); 

Как поменять этот список? Возможно ли также прямое изменение EntityList?

+0

Если вы хотите наиболее эффективный способ, добавьте его в стек, а затем снимите его. Первый элемент в стеке является последним. –

ответ

16

Обратный делает разворот на месте и ничего не возвращает. Вместо того, чтобы сделать:

List<Entities.Notification> ProgramList = EventData.ToList(); 
ProgramList.Reverse(); 
ListViewEvents.DataSource = ProgramList; 
ListViewEvents.DataBind(); 
+0

Возможно, это скорее комментарий к исходному вопросу, чем ответ. Вы правы, но это недостаточно полно, чтобы быть ответом. –

+1

@Maurice Reeves - Обновлен для получения более полного ответа. –

5

Обратный метод не возвращает новый List. Вызовите его, затем установите источник данных.

List<Entities.Notification> ProgramList = EventData.ToList(); 
ProgramList.Reverse(); 
ListViewEvents.DataSource = ProgramList; 
ListViewEvents.DataBind(); 
+0

Ваш код неверен. 'ListView.DataBind' ничего не возвращает. – Romoku

+0

@Romoku, Вы правы, я недостаточно читал код. – Khan

5

Компилятор выбирает метод List<T>.Reverse() вместо метода расширения Linq Enumerable.Reverse<T>(this IEnumerable<T>).

Поскольку List<T>.Reverse() изменяет список путем изменения элементов в месте, а не возвращает новый список, вы можете просто назвать это как отдельный шаг:

List<Entities.Notification> ProgramList = EventData.ToList(); 
ProgramList.Reverse(); 
ListViewEvents.DataSource = ProgramList; 
ListViewEvents.DataBind(); 

или

List<Entities.Notification> ProgramList = EventData.ToList().Reverse(); 
ListViewEvents.DataSource = ProgramList; 
ListViewEvents.DataBind(); 

или вы можете позвонить по телефону AsEnumerable() вместо ToList() вместо этого:

List<Entities.Notification> ProgramList = EventData.AsEnumerable(); 
ListViewEvents.DataSource = ProgramList.Reverse(); // returns a new IEnumerable 
ListViewEvents.DataBind(); 

В качестве примечания стороны метод расширения может работать лучше, чем List<T>.Reverse, поскольку он возвращает итератор, который перемещает список в обратном порядке, а не физически меняет порядок элементов в списке.

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