如何通过具有多个循环的IList集合进行递增

时间:2012-02-19 10:19:39

标签: c#

我有以下函数调用:

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

在这个函数中,我知道我可以使用以下内容循环使用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的情况下完成此操作?

1 个答案:

答案 0 :(得分: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
}