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?
List<int> list
, alorslist.Reverse()
appelle la version en place. Ensuite, un autre développeur est très intelligent et change la déclaration enIList<int>
. Cela casse le code d'une manière très inattendue, car alors laIEnumerable<TSource> Reverse<TSource>(this IEnumerable<TSource> source)
surcharge de fonction est utilisée, et cela passe inaperçu - vous devriez surveiller la valeur de retour inutilisée, et cela est rarement pratiqué en C #Une solution de contournement serait
Return NavItems.AsEnumerable().Reverse();
la source
.Reverse()
sur une liste inverse les éléments de la liste, il ne renvoie pas de nouvelle liste inversée.la source
Reverse()
ne retourne pas la liste inversée elle-même, il modifie la liste d'origine. Alors réécrivez-le comme suit:À
la source
Reverse()
ne renvoie pas une liste comme prévu de votre fonction.la source
.Reverse
inverse le "sur place" ..., essayezla source
Si vous avez une liste comme dans votre exemple:
Vous pouvez utiliser la méthode générique des extensions Reverse <> pour renvoyer une nouvelle liste sans modifier la liste d'origine. Utilisez simplement la méthode d'extension comme celle-ci:
Remarques: Vous devez spécifier les balises génériques <> pour utiliser explicitement la méthode d'extension. N'oubliez pas le
la source