2012-02-19 29 views
0

我有以下函數調用:我如何通過一個IList集合增加一個以上的環

public static MvcHtmlString NavLinks(
      this HtmlHelper helper, 
      IList<MenuItem> menuItems) { 

在這個函數中,我知道我可以通過的菜單項使用下面的循環

foreach (MenuItem menuItem in menuItems) { 
     <code here> 
    } 

但我需要做的是通過外部和 內循環menuItems列表來顯示頂部菜單的一些代碼,然後代碼爲每個頂級菜單項的一部分子菜單項。

因此,每當menuItem.Outer的值發生變化時,我想要執行一些操作,然後不斷用不同的menuItem.Inner讀取記錄,直到外環的值再次發生變化。

下面是我的數據看起來像的一個例子。我只顯示兩列,其中第1列表示menuItem.Outer和列2代表menuItem.Inner

的樣本數據

..... 
00 - do outer loop open action A 
01 - do inner loop open action B 
02 - do inner loop close action C, open action B 
10 - do inner loop close action C, outer loop close action D and outer loop open action A 
11 - do inner loop open action A 
12 - do inner loop close action C, open action B 
.... 
.... 
"no more data" - do inner loop close action C, outer loop close action D 
.... 

的行動:

action A that needs executing when the outer loop starts 
action D that needs executing when the outer loop ends 
action B that needs executing when the inner loop starts 
action C that needs executing when the inner loop ends 

有一個簡單的我可以做到這一點,而不使用foreach?

+0

你所說的「顯示頂部菜單是每個頂級菜單項的部分子菜單項的一些代碼,然後代碼」是什麼意思?你的意思是簡單地遍歷內部的MenuItems,即:foreach(var menutItem.Items){} – Lloyd 2012-02-19 10:27:58

+0

我很困惑的問題。你只是想實現'foreach(var in menuItem.Outer){foreach(var i in menuItem.Inner){...}]'那麼你爲什麼不使用'foreach'? – 2012-02-19 10:29:56

+0

我在尋找的是一些讓我有點控制的方法。某些不使用foreach的東西。如果存在,就像是「下一個」? – 2012-02-19 11:06:46

回答

1

可以使用GroupBy Extension Method

foreach (var group in menuItems.GroupBy(item => item.Outer)) 
{ 
    // begin outer menu "group.Key" 
    foreach (var item in group) 
    { 
     // inner menu "item.Inner" 
    } 
    // end outer menu 
} 
相關問題