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();
}
O inverso não funciona:
Error 3 Cannot implicitly convert type 'void' to 'System.Collections.Generic.List<Lite.CategoryNavItem>'
Alguma ideia de por que isso pode ser?
List<int> list
, entãolist.Reverse()
chama a versão local. Então, um colega desenvolvedor é extremamente inteligente e altera a declaração paraIList<int>
. Isso quebra o código de uma maneira muito inesperada, porque então aIEnumerable<TSource> Reverse<TSource>(this IEnumerable<TSource> source)
sobrecarga de função é usada e isso passa despercebido - você teria que observar o valor de retorno não utilizado e isso raramente é praticado em C #Uma solução alternativa seria
Return NavItems.AsEnumerable().Reverse();
fonte
.Reverse()
em uma lista inverte os itens da lista, não retorna uma nova lista invertida.fonte
Reverse()
não retorna a lista invertida em si, ele modifica a lista original. Portanto, reescreva da seguinte forma:PARA
fonte
Reverse()
não retorna uma lista conforme o esperado de sua função.fonte
.Reverse
inverte o "no local" ..., tentefonte
Se você tiver uma lista como em seu exemplo:
Você pode usar o método genérico Reverse <> extensions para retornar uma nova lista sem modificar a original. Basta usar o método de extensão como este:
Notas: Você precisa especificar as <> tags genéricas para usar explicitamente o método de extensão. Não se esqueça do
fonte