c # Cercando di invertire una lista

public class CategoryNavItem { public int ID { get; set; } public string Name { get; set; } public string Icon { get; set; } public CategoryNavItem(int CatID, string CatName, string CatIcon) { ID = CatID; Name = CatName; Icon = CatIcon; } } public static List getMenuNav(int CatID) { List NavItems = new List(); -- Snipped code -- return NavItems.Reverse(); } 

Il contrario non funziona:

Error 3 Cannot implicitly convert type 'void' to 'System.Collections.Generic.List'

Qualche idea del perché questo potrebbe essere?

Provare:

 NavItems.Reverse(); return NavItems; 

List.Reverse() è un reverse sul posto ; non restituisce una nuova lista.

Ciò contrasta con LINQ, dove Reverse() restituisce la sequenza invertita, ma quando esiste un metodo adatto non di estensione è sempre selezionato in preferenza a un metodo di estensione. Inoltre, nel caso LINQ dovrebbe essere:

 return someSequence.Reverse().ToList(); 

Una soluzione alternativa potrebbe essere Return NavItems.AsEnumerable().Reverse();

.Reverse() su una lista inverte gli elementi all’interno della lista, non restituisce una nuova lista inversa.

Reverse() non restituisce la lista inversa, modifica l’elenco originale. Quindi riscrivilo come segue:

 return NavItems.Reverse(); 

A

 NavItems.Reverse(); return NavItems; 

Reverse() non restituisce una lista come previsto dalla vostra funzione.

 NavItems.Reverse(); return NavItems; 

.Reverse inverte il “in-place” …, prova

 NavItems.Reverse(); return NavItems; 

Se hai una lista come nel tuo esempio:

 List NavItems 

È ansible utilizzare il metodo di estensione Reverse <> generico per restituire un nuovo elenco senza modificare quello originale. Basta usare il metodo di estensione come questo:

 List reversed = NavItems.Reverse(); 

Note: è necessario specificare i tag generici <> per utilizzare esplicitamente il metodo di estensione. Non dimenticare il

 using System.Linq;