C#中如何反转一个列表

4
我已将EventData EntityList插入普通列表中,现在我想将其反转。 但是它会出现错误“无法隐式转换类型'void'为'object'”。
List<Entities.Notification> ProgramList = EventData.ToList();
ListViewEvents.DataSource = ProgramList.Reverse();
ListViewEvents.DataBind();

如何翻转这个列表?是否可以直接翻转EntityList呢?


如果你想要最有效率的方式,就把它加入堆栈,然后再取出来。堆栈上的第一个项目是最后一个被取出来的。 - Ryan Ternier
3个回答

20

reverse() 方法会直接修改原数组,不会返回任何值。如果需要获取反转后的数组,请使用以下方式:

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

这可能更适合作为对原问题的评论而不是答案。你说得对,但它不足以成为一个完整的答案。 - Maurice Reeves
1
@Maurice Reeves - 更新以获得更完整的答案。 - Brian Maupin

5
反转方法不会返回一个新的List。调用它,然后设置数据源。
List<Entities.Notification> ProgramList = EventData.ToList();
ProgramList.Reverse();
ListViewEvents.DataSource = ProgramList;
ListViewEvents.DataBind();

你的代码有误。ListView.DataBind 不会返回任何内容。 - Dustin Kingen
@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更快,因为它返回一个迭代器,按相反的顺序遍历列表,而不是在物理上反转列表中项目的顺序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接