4

ネストされたツリー構造の深さを見つけることができるプロパティを作成したいと考えています。以下の静的は、再帰によって深さ/レベルを見つけます。しかし、この関数を静的メソッドではなく、同じクラスのプロパティとして作成することは可能ですか?

public static int GetDepth(MenuGroup contextMenuItems)
{
    if (contextMenuItems == null || contextMenuItems.Items.Count == 0)
        return 0;

    var subMenu = contextMenuItems.Items.Select(b => b as MenuGroup);
    if (!subMenu.Any())
        return 1;

    var subLevel = subMenu.Cast<MenuGroup>().Select(GetDepth);
    return !subLevel.Any() ? 1 : subLevel.Max() + 1;
}

コードの詳細: MenuGroupMenuItemMenuBaseから派生しています。

MenuGroupObservableCollection<MenuBase> Itemsには、子要素として子ノードがあります

MenuItemは、子を持たない leave ノードです。

4

2 に答える 2

0
public string GenerateMenu()
{
    StringBuilder sb = new StringBuilder();
    sb.Append("<nav id=\"nvMenu\" class=\"main-nav\"><ul>");
    sb.Append(PrepareMenuUL(AppConfig._AppConfigInstance.Navigation.FirstOrDefault().NavigationClass));
    sb.Append("</ul></nav>");
    return sb.ToString();
}

private string PrepareMenuUL(List<Navigation> navigation)
{
    StringBuilder sb = new StringBuilder();

    if (Liflag == 1)
    {
        sb.Append("</li>");
        Liflag = 0;
    }

    foreach (var item in navigation)
    {
        var subMenu = item.NavigationClass.Select(b => b as Navigation);

        if (subMenu.Any())
        {
            sb.Append("<li class=\"dropdown\">");
            if (subMenu.Any() && item.Url == "#")
                sb.Append(string.Format("<a href=\"{0}\">{1}<i class=\"icon-arrow\"></i></a>", BaseUrl + item.Url, item.Name));
            else if (subMenu.Any() && item.Url != "#" && item.Url != null)
                sb.Append(string.Format("<a href=\"{0}\">{1}<i class=\"icon-rightarrow\"></i></a>", BaseUrl + item.Url, item.Name));
        }
        else
        {
            sb.Append("<li>");
            sb.Append(string.Format("<a href=\"{0}\">{1}</a>", BaseUrl + item.Url, item.Name));
        }

        if (subMenu.Any())
            sb.Append("<ul class=\"wd190\">");

        if (item.NavigationClass.Count > 0)
        {
            Liflag = 1;
            sb.Append(PrepareMenuUL(item.NavigationClass));
        }

        sb.Append("</li>");

        if (subMenu.Any())
            sb.Append("</ul>");
    }

    return sb.ToString();
}
于 2014-03-14T12:23:21.913 に答える