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();
}
L'inverse ne fonctionne pas:
Error 3 Cannot implicitly convert type 'void' to 'System.Collections.Generic.List<Lite.CategoryNavItem>'
Des idées pourquoi cela pourrait être?
Essayer:
NavItems.Reverse();
return NavItems;
List<T>.Reverse()
est une inversion sur place ; il ne retourne pas une nouvelle liste.
Ceci fait un contraste avec LINQ, où Reverse()
renvoie la séquence inversée, mais quand il existe une méthode non-extension appropriée, elle est toujours sélectionnée de préférence à une méthode d'extension. De plus, dans le cas LINQ, il faudrait que:
return someSequence.Reverse().ToList();
Une solution de contournement serait Return NavItems.AsEnumerable().Reverse();
.Reverse()
sur une liste annule les éléments de la liste, il ne renvoie pas de nouvelle liste inversée.
Reverse()
ne renvoie pas la liste inversée elle-même, il modifie la liste d'origine. Donc, réécrivez-le comme suit:
return NavItems.Reverse();
À
NavItems.Reverse();
return NavItems;
Reverse()
ne renvoie pas une liste comme prévu de votre fonction.
NavItems.Reverse();
return NavItems;
.Reverse
inverse le "in-place" ..., essayez
NavItems.Reverse();
return NavItems;
Si vous avez une liste comme dans votre exemple:
List<Lite.CategoryNavItem> NavItems
Vous pouvez utiliser la méthode générique Reverse <> extensions pour renvoyer une nouvelle liste sans modifier celle d'origine. Utilisez simplement la méthode d'extension comme ceci:
List<Lite.CategoryNavItem> reversed = NavItems.Reverse<Lite.CategoryNavItem>();
Remarques: Vous devez spécifier les balises génériques <> pour utiliser explicitement la méthode d'extension. N'oublie pas le
using System.Linq;