[c#] c # 목록을 뒤집으려고

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()이다 제자리 반대; 새 목록을 반환하지 않습니다.

이것은 수행 LINQ 대조적를 Reverse() 리턴 반전 된 순서이지만 적당한 비 확장 방법이있을 때 그것을되어 항상 확장 방법에 우선하여 선택. 또한 LINQ의 경우 다음과 같아야합니다.

return someSequence.Reverse().ToList();


답변

한 가지 해결 방법은 다음과 같습니다. Return NavItems.AsEnumerable().Reverse();


답변

.Reverse() on a list는 목록 내의 항목을 반전하지만 새 반전 된 목록을 반환하지 않습니다.


답변

Reverse()반전 된 목록 자체를 반환하지 않고 원래 목록을 수정합니다. 따라서 다음과 같이 다시 작성하십시오.

return NavItems.Reverse();

NavItems.Reverse();
return NavItems;


답변

Reverse() 함수의 예상대로 목록을 반환하지 않습니다.

NavItems.Reverse();
return NavItems;


답변

.Reverse “in-place”를 뒤집습니다 …, 시도

NavItems.Reverse();
return NavItems;


답변

예와 같은 목록이있는 경우 :

List<Lite.CategoryNavItem> NavItems

일반 Reverse <> 확장 메서드를 사용하여 원래 목록을 수정하지 않고 새 목록을 반환 할 수 있습니다. 다음과 같은 확장 방법을 사용하십시오.

List<Lite.CategoryNavItem> reversed = NavItems.Reverse<Lite.CategoryNavItem>();

참고 : 확장 메서드를 명시 적으로 사용하려면 <> 일반 태그를 지정해야합니다. 잊지 마세요

using System.Linq;