计算类层次结构的深度

时间:2016-01-15 20:12:12

标签: c# recursion iteration hierarchy

我已经看到很多不同的例子,如何做到这一点,并且我很清楚我可以编写一个循环来迭代我的整个类树以找到最大深度,但我不禁想到有必要是一种更简单的方式。

基本上我开发了两个类来托管我的所有应用程序设置,SettingGroup这听起来就像是一个文件夹,而Setting是设置本身和配置允许应用程序知道设置的内容以及如何显示它。我不使用固定类并为我的设置写出字段的原因是应用程序是插件驱动的,我希望设置保持集中,插件被添加或删除,而不必担心来自插件的分散数据。 / p>

当动态创建设置页面时,有必要知道任何特定SettingGroup的最大深度,所以我知道根首先应该按标签,页面,部分等进行组织......

长话短说,是否有一种相当轻量级的方法来确定群体的最大深度?

public enum DescriptionVisibility { None, SubText, ToolTip };
public enum SettingType { Bool, Integer, Decimal, Text };
public enum SettingControl { Checkbox, Textbox, Slider, Radio, Dropdown, TextField, Color};

public class SettingGroup
{
    public string name { get; set; }
    public string description { get; set; }
    public List<SettingGroup> groups { get; set; }
    public List<Setting> settings { get; set; }
}
public class Setting
{
    public string name { get; set; }
    public string description { get; set; }
    public DescriptionVisibility descriptionVisibility { get; set; }
    public Dictionary<string, dynamic> configuration { get; set; }
    public dynamic settingValue { get; set; }
    public SettingType settingType { get; set; }
    public SettingControl settingControl { get; set; }

}

编辑:这是未经测试的,但这是我目前正在考虑使用的内容;

    private static int getDepth(this SettingGroup group, int depth = 0)
    {
        if (group.groups == null)
            return depth;
        if (group.groups.Count == 0)
            return depth;

        int returnDepth = depth;

        foreach (SettingGroup subGroup in group.groups)
        {
            int subGroupDepth = subGroup.getDepth(depth + 1);
            if (subGroupDepth > returnDepth)
                returnDepth = subGroupDepth;
        }

        return returnDepth;
    }

它非常基本,所以它不会太慢,但仍然看起来很笨,是不是LINQ方式可以做到这一点?

0 个答案:

没有答案