c# en Essayant d'inverser une liste
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?
InformationsquelleAutor Tom Gullen | 2011-08-08
Vous devez vous connecter pour publier un commentaire.
Essayer:
List<T>.Reverse()
est un en place inverse; elle ne renvoie pas à une nouvelle liste.Ce ne contrairement à LINQ, où
Reverse()
retourne l'inversion de l'ordre, mais quand il y a une non-méthode d'extension il est toujours choisi de préférence à une méthode d'extension. De Plus, dans le LINQ cas, il devrait être:List<int> list
, puislist.Reverse()
appels de la version. Ensuite, un autre développeur est très intelligent et modifications de la déclaration deIList<int>
. Cela rompt avec le code dans une manière très inattendue, parce qu'alors la fonctionIEnumerable<TSource> Reverse<TSource>(this IEnumerable<TSource> source)
surcharge est utilisé, et cela passe inaperçu - vous devez regarder pour les valeur de retour, et c'est rarement pratiquée en C#Une solution de contournement serait
Return NavItems.AsEnumerable().Reverse();
.Reverse()
sur une liste inverse les éléments dans la liste, il ne retourne pas une nouvelle liste inversée.Reverse()
ne pas renvoie la liste inversée lui-même, il modifie la liste d'origine. Donc réécrire sous la forme suivante:À
Reverse()
ne renvoie pas une Liste comme prévu de votre fonction..Reverse
inverse le "sur place"..., essayezSi vous avez une liste, comme dans votre exemple:
Vous pouvez utiliser le générique Inverser<> extensions de la méthode retourne une nouvelle liste sans modifiying de l'original. Juste utiliser l'extension de la méthode comme ceci:
Notes: Vous devez spécifier le <> generic tags explicite de l'utilisation de la méthode d'extension.
N'oubliez pas le