2013-07-29 96 views
2

我已經插入EventData EntityList到一個正常的列表,現在我想要將其顛倒。 但它給出了錯誤「無法隱式轉換類型‘無效’到‘對象’」顛倒名單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

編譯器而是選擇了LINQ的擴展方法Enumerable.Reverse<T>(this IEnumerable<T>)的方法List<T>.Reverse()

由於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,因爲它返回的迭代器以相反的順序遍歷列表,而不是實際顛倒列表中項目的順序。