我有以下代码:
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();
}
但是我收到以下错误:
无法将类型“void”隐式转换为
'System.Collections.Generic.List<Lite.CategoryNavItem>'
有什么想法吗?
尝试:
NavItems.Reverse();
return NavItems;
List<T>.Reverse()
是 in-place 反转;它不会返回新列表。
这确实与 LINQ 形成对比,其中
Reverse()
返回相反的序列,但是当存在合适的非扩展方法时,它始终优先于扩展方法选择。另外,在 LINQ 情况下,它必须是:
return someSequence.Reverse().ToList();
Return NavItems.AsEnumerable().Reverse();
.Reverse()
会反转列表中的项目,但不会返回新的反转列表。
Reverse()
本身不返回反转列表,它修改原始列表。所以重写如下:
return NavItems.Reverse();
致
NavItems.Reverse();
return NavItems;
Reverse()
不会按照您的函数预期返回列表。
NavItems.Reverse();
return NavItems;
someList.Reverse()
,因为它什么也没有返回(
void
)
someList.Reverse()
,因为它修改了源列表
someList.AsEnumerable().Reverse()
并得到
Ambiguous invocation
错误
您可以尝试Enumerable.Reverse(someList)
。不要忘记:
using System.Linq;
List<Lite.CategoryNavItem> NavItems
您可以使用通用的 Reverse<> 扩展方法返回一个新列表,而无需修改原始列表。只需使用这样的扩展方法即可:
List<Lite.CategoryNavItem> reversed = NavItems.Reverse<Lite.CategoryNavItem>();
注意:您需要指定 <> 通用标签才能显式使用扩展方法。 别忘了
using System.Linq;
.Reverse
反转“就地”...,试试
NavItems.Reverse();
return NavItems;
The overload code people are writing these days is overwhelming. Using enumerators and LINQ and so on... when a simple method can do this:
public void Reverse<T>(List<T> list)
{
int last = list.Count - 1;
int middle = list.Count >> 1;
for (int i = 0; i < middle; i++) (list[i], list[last - i]) = (list[last - i], list[i]);
}