2011-08-08 43 views
56
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(); 
} 

反向不起作用:C#試圖扭轉名單

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

任何想法,這可能是爲什麼?

回答

97

嘗試:

NavItems.Reverse(); 
return NavItems; 

List<T>.Reverse()是就地反向的;它不會返回一個新的列表。

確實對比LINQ,其中Reverse()返回相反的順序,但是,當存在合適的非擴展方法是總是優先選擇的擴展方法。另外,在LINQ情況下,它必須是:

return someSequence.Reverse().ToList(); 
+2

超級謝謝,這真的很有幫助! –

+0

FYI誰想要扭轉數組這是不行的,你需要調用Array.Reverse(陣列)來代替。 – w69rdy

+3

從一個有趣的特例剛剛遭遇:當一個變量聲明爲'名單 list',然後'list.Reverse()'調用就地版本。隨後,一位同行的開發商額外智能和改變聲明'IList的'。這打破了一個非常意外的方式代碼,因爲這時函數'的IEnumerable 反向'超負荷使用(這IEnumerable的源),這被忽視 - 你必須看未使用的返回值,這是很少練在C# – dlatikay

16

.Reverse()名單上反轉列表中的項目,它不會返回一個新的逆轉列表。

5

Reverse()按照預期的功能不返回一個列表。

NavItems.Reverse(); 
return NavItems;
+0

而且因爲它返回void,所以不能將其分配給rev。 – Flagbug

6

Reverse()沒有回報逆轉列表本身,它修改原始列表。所以把它改寫如下:

return NavItems.Reverse(); 

TO

NavItems.Reverse(); 
return NavItems; 
3

.Reverse逆轉 「就地」 ......,嘗試

NavItems.Reverse(); 
return NavItems; 
61

一種解決方法是Return NavItems.AsEnumerable().Reverse();

+9

+1此解決方案不會修改原始列表。 – toree