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();
}
Lo contrario no funciona:
Error 3 Cannot implicitly convert type 'void' to 'System.Collections.Generic.List<Lite.CategoryNavItem>'
¿Alguna idea de por qué podría ser esto?
List<int> list
,list.Reverse()
llama a la versión local. Luego, un compañero desarrollador es muy inteligente y cambia la declaración aIList<int>
. Esto rompe el código de una manera muy inesperada, porque luegoIEnumerable<TSource> Reverse<TSource>(this IEnumerable<TSource> source)
se usa la sobrecarga de la función , y esto pasa desapercibido; tendría que estar atento al valor de retorno no utilizado, y eso rara vez se practica en C #Una solución alternativa sería
Return NavItems.AsEnumerable().Reverse();
fuente
.Reverse()
en una lista invierte los elementos dentro de la lista, no devuelve una nueva lista invertida.fuente
Reverse()
no devuelve la lista invertida en sí, modifica la lista original. Así que reescríbalo de la siguiente manera:A
fuente
Reverse()
no devuelve una lista como se esperaba de su función.fuente
.Reverse
invierte el "en el lugar" ..., intentefuente
Si tiene una lista como en su ejemplo:
Puede usar el método genérico de extensiones Reverse <> para devolver una nueva lista sin modificar la original. Simplemente use el método de extensión como este:
Notas: Debe especificar las etiquetas genéricas <> para utilizar explícitamente el método de extensión. No olvides el
fuente