2011-08-08 16 views
56
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<Lite.CategoryNavItem> getMenuNav(int CatID) 
{ 
    List<Lite.CategoryNavItem> NavItems = new List<Lite.CategoryNavItem>(); 

    -- Snipped code -- 

    return NavItems.Reverse(); 
} 

La inversa no funciona #?c Tratando de revertir una lista

Respuesta

97

Probar:

NavItems.Reverse(); 
return NavItems; 

List<T>.Reverse() es un en el lugar inversa; no devuelve una nueva lista.

Este hace contraste con LINQ, donde Reverse()rendimientos la secuencia invertida, pero cuando hay un método no extensión adecuada es siempre seleccionan con preferencia a un método de extensión. Además, en el caso de LINQ que tendría que ser:

return someSequence.Reverse().ToList(); 
+2

Súper gracias, esto es realmente útil! –

+0

Para su información, para aquellos que quieran invertir una matriz, esto no funciona; en su lugar, deben llamar a Array.Reverse (matriz). – w69rdy

+3

Acabo de sufrir de un caso especial interesante: cuando una variable se declara como 'Lista list', entonces' list.Reverse() 'llama a la versión en contexto. Entonces, un compañero desarrollador es muy inteligente y cambia la declaración a 'IList '. Esto rompe el código de una manera muy inesperada, porque luego se usa la función 'IEnumerable Reverse (esta fuente IEnumerable )', y esto pasa desapercibido - tendrías que vigilar el valor de retorno no utilizado, y eso rara vez se practica en C# – dlatikay

16

.Reverse() en una lista invierte los elementos dentro de la lista, no devuelve una nueva lista invertida.

5

Reverse() no devuelve una lista como se esperaba de su función.

NavItems.Reverse(); 
return NavItems;
+0

Y como devuelve nulo, no puede asignarlo a rev. – Flagbug

6

Reverse() no significa retornos lista en sí invierte, se modifica la lista original. Así que volver a escribir la siguiente manera:

return NavItems.Reverse(); 

A

NavItems.Reverse(); 
return NavItems; 
3

.Reverse invierte la "in-situ" ..., intente

NavItems.Reverse(); 
return NavItems; 
61

Una solución sería Return NavItems.AsEnumerable().Reverse();

+9

+1 Esta solución no modificará la lista original. – toree

Cuestiones relacionadas