4

我已将 EventData EntityList 插入到普通列表中,现在我想反转它。但它给出了错误“无法将类型'void'隐式转换为'object'”

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

如何反转此列表?是否也可以直接反转EntityList?

4

3 回答 3

20

Reverse 进行原地反转并且不返回任何内容。而是这样做:

List<Entities.Notification> ProgramList = EventData.ToList();
ProgramList.Reverse();
ListViewEvents.DataSource = ProgramList;
ListViewEvents.DataBind();
于 2013-07-29T18:30:43.793 回答
5

reverse 方法不返回新的List. 调用它,然后设置数据源。

List<Entities.Notification> ProgramList = EventData.ToList();
ProgramList.Reverse();
ListViewEvents.DataSource = ProgramList;
ListViewEvents.DataBind();
于 2013-07-29T18:29:19.480 回答
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因为它返回一个以相反顺序遍历列表的迭代器,而不是物理上颠倒列表中项目的顺序。

于 2013-07-29T18:39:06.360 回答