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();
}
Das Gegenteil funktioniert nicht:
Error 3 Cannot implicitly convert type 'void' to 'System.Collections.Generic.List<Lite.CategoryNavItem>'
Irgendwelche Ideen, warum das so sein könnte?
List<int> list
, wirdlist.Reverse()
die In-Place-Version aufgerufen. Dann ist ein Mitentwickler besonders schlau und ändert die Deklaration inIList<int>
. Dies bricht den Code auf sehr unerwartete Weise, da dann die FunktionsüberladungIEnumerable<TSource> Reverse<TSource>(this IEnumerable<TSource> source)
verwendet wird und dies unbemerkt bleibt - Sie müssten auf nicht verwendete RückgabewerteEine Problemumgehung wäre
Return NavItems.AsEnumerable().Reverse();
quelle
.Reverse()
Wenn eine Liste die Elemente in der Liste umkehrt, wird keine neue umgekehrte Liste zurückgegeben.quelle
Reverse()
Gibt die umgekehrte Liste selbst nicht zurück, sondern ändert die ursprüngliche Liste. Schreiben Sie es also wie folgt um:ZU
quelle
Reverse()
gibt keine Liste zurück, wie von Ihrer Funktion erwartet.quelle
.Reverse
kehrt das "In-Place" um ..., versuchen Sie esquelle
Wenn Sie eine Liste wie in Ihrem Beispiel haben:
Sie können die generische Reverse <> -Erweiterungsmethode verwenden, um eine neue Liste zurückzugeben, ohne die ursprüngliche zu ändern. Verwenden Sie einfach die Erweiterungsmethode wie folgt:
Hinweise: Sie müssen die generischen <> Tags angeben, um die Erweiterungsmethode explizit verwenden zu können. Vergiss das nicht
quelle