c#试图反转列表

Tom*_*len 85 c# reverse list

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();
}
Run Code Online (Sandbox Code Playgroud)

反过来不起作用:

Error 3 Cannot implicitly convert type 'void' to 'System.Collections.Generic.List<Lite.CategoryNavItem>'

任何想法为什么会这样?

Mar*_*ell 136

尝试:

NavItems.Reverse();
return NavItems;
Run Code Online (Sandbox Code Playgroud)

List<T>.Reverse()是一个就地逆转; 它不会返回新列表.

确实对比LINQ,其中Reverse() 返回所述相反的顺序,但是,当存在合适的非扩展方法时总是优先选择的扩展方法.另外,在LINQ案例中,它必须是:

return someSequence.Reverse().ToList();
Run Code Online (Sandbox Code Playgroud)

  • 刚遇到一个有趣的特殊情况:当一个变量声明为`List <int> list`时,`list.Reverse()`调用就地版本.然后,一个开发人员更聪明,并将声明更改为`IList <int>`.这会以非常意外的方式破坏代码,因为然后使用了函数`IEnumerable <TSource> Reverse <TSource>(这个IEnumerable <TSource> source)`重载,而这一点不被注意 - 你必须注意未使用的返回值,这在C#中很少实践 (9认同)

Maf*_*osh 94

一个解决方法是 Return NavItems.AsEnumerable().Reverse();

  • +1此解决方案不会修改原始列表. (18认同)
  • 这很好,并且适用于我的情况(保持原始列表不变)!谢谢 (3认同)

Kie*_*one 20

.Reverse() 在列表中反转列表中的项目,它不会返回新的反转列表.


sll*_*sll 8

Reverse()不返回反转列表本身,它修改原始列表.所以重写如下:

return NavItems.Reverse(); 
Run Code Online (Sandbox Code Playgroud)

NavItems.Reverse(); 
return NavItems;
Run Code Online (Sandbox Code Playgroud)


JK.*_*JK. 6

Reverse() 不会按预期函数返回List.

NavItems.Reverse();
return NavItems;
Run Code Online (Sandbox Code Playgroud)