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();
}
逆は機能しません:
Error 3 Cannot implicitly convert type 'void' to 'System.Collections.Generic.List<Lite.CategoryNavItem>'
なぜこれが考えられるのか?
試してください:
_NavItems.Reverse();
return NavItems;
_
List<T>.Reverse()
は、in-place逆です。新しいリストは返されません。
これはdoesLINQとは対照的で、Reverse()
returns逆の順序ですが、適切な非拡張メソッドがある場合は、拡張メソッドよりも優先してalwaysが選択されます。さらに、LINQの場合は次のようにする必要があります。
_return someSequence.Reverse().ToList();
_
1つの回避策はReturn NavItems.AsEnumerable().Reverse();
です
リストの.Reverse()
は、リスト内のアイテムを反転します。新しい反転リストは返しません。
Reverse()
は逆のリスト自体を返さず、元のリストを変更します。したがって、次のように書き換えます。
return NavItems.Reverse();
に
NavItems.Reverse();
return NavItems;
Reverse()
は、関数の期待どおりのリストを返しません。
NavItems.Reverse();
return NavItems;
.Reverse
「インプレース」を逆にします...、試してください
NavItems.Reverse();
return NavItems;
あなたの例のようなリストがある場合:
List<Lite.CategoryNavItem> NavItems
汎用のReverse <>拡張メソッドを使用して、元のリストを変更せずに新しいリストを返すことができます。次のような拡張メソッドを使用します。
List<Lite.CategoryNavItem> reversed = NavItems.Reverse<Lite.CategoryNavItem>();
注:拡張メソッドを明示的に使用するには、<>汎用タグを指定する必要があります。忘れないで
using System.Linq;