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();
}
Odwrotna nie działa:
Error 3 Cannot implicitly convert type 'void' to 'System.Collections.Generic.List<Lite.CategoryNavItem>'
Jakieś pomysły, dlaczego tak może być?
List<int> list
,list.Reverse()
wywołuje wersję lokalną. Następnie inny programista jest wyjątkowo inteligentny i zmienia deklarację naIList<int>
. To łamie kod w bardzo nieoczekiwany sposób, ponieważ wtedyIEnumerable<TSource> Reverse<TSource>(this IEnumerable<TSource> source)
używane jest przeciążenie funkcji , a to pozostaje niezauważone - musiałbyś uważać na nieużywaną wartość zwracaną, co jest rzadko praktykowane w C #Jednym obejściem byłoby
Return NavItems.AsEnumerable().Reverse();
źródło
.Reverse()
na liście odwraca pozycje na liście, nie zwraca nowej odwróconej listy.źródło
Reverse()
nie zwraca samej odwróconej listy, modyfikuje oryginalną listę. Więc przepisz to w następujący sposób:return NavItems.Reverse();
DO
NavItems.Reverse(); return NavItems;
źródło
Reverse()
nie zwraca listy zgodnie z oczekiwaniami Twojej funkcji.NavItems.Reverse(); return NavItems;
źródło
.Reverse
odwraca działanie „w miejscu” ... spróbujNavItems.Reverse(); return NavItems;
źródło
Jeśli masz listę taką jak w przykładzie:
Możesz użyć ogólnej metody rozszerzeń Reverse <>, aby zwrócić nową listę bez modyfikowania oryginalnej. Po prostu użyj następującej metody rozszerzenia:
Uwagi: Aby jawnie używać metody rozszerzenia, należy określić tagi ogólne <>. Nie zapomnij o
using System.Linq;
źródło