以树形方式排列的数据的自定义类

时间:2012-12-04 20:12:03

标签: c#

我正在尝试创建一个以下列方式排列数据的自定义类: -

Departments 
        Section 1
                 Person 1
                 Person 2
        Section 2
        ... etc

下面是我写的代码,但它不能像我在想的那样工作: -

    public class Sections
    {
        private List<Section> _Section = new List<Section>();
        public List<Section> Section
        {
            get
            {
                return this._Section;
            }
        }
    }
    //Innehåller alla detailer om varje sektion
    public class Section
    {
        public string Name { get; set; }
        public int Capacity { get; set; }
        public int MinimumStaffing { get; set; }
        public int IdealStaffing { get; set; }

        private List<Person> _Employee = new List<Person>();
        public List<Person> Employee
        {
            get
            {
                return this._Employee;
            }
            set { }
        }
    }
    //Innehåller alla info. om en enskild personal
    public class Person
    {
        public string Name { get; set; }
        public string Email { get; set; }
        public int TelephoneNo { get; set; }
        public int Pager { get; set; }
        public int HomePhone { get; set; }
        public string Title { get; set; }
    }

我想做的是: - 首先: - 获取Section 1的名称并将其保存为字符串。 第二: - 获取本节中每个人的姓名(第1节)。 第三: - 将第1部分的名称和本节中的人员名单添加到命名部门列表中。

下面是我用来实现我想要做的代码(这对我不起作用,请参阅下面的更多信息)

if (index == 0 || index == node.ChildNodes.Count)
                        {
                            if (node.ChildNodes.Count == 2)
                            {
                                sektionsNamn = node.ChildNodes[0].InnerText;
                                continue;
                            }
                            else if (node.ChildNodes.Count > 2)
                            {
                                Sektion.Employee.Add(new Person() { Name = node.ChildNodes[0].InnerText });
                                index = node.ChildNodes.Count;
                                continue;
                            }
                        }
                        else
                        {
                            Sektioner.Section.Add(new Section() { Name = sektionsNamn, Employee=Sektion.Employee });
                            index = 0;
                        }

问题在于else语句,它返回0个计数,即它添加了Name属性,但它没有添加员工列表。

任何想法如何克服这个?

抱歉打扰并提前致谢。

1 个答案:

答案 0 :(得分:3)

Employee类中Section属性的属性设置器为空,因此当您像_Employee一样调用它时,不会向Sektioner.Section.Add(new Section() { Name = sektionsNamn, Employee=Sektion.Employee })分配任何内容。在您的示例中,您拥有Employee属性的代码:

public List<Person> Employee
{
     get
     {
           return this._Employee;
     }
     set { }
}

您应该将其更改为此代码(即实现属性设置器)

public List<Person> Employee
{
       get
       {
            return this._Employee;
       }
       set 
       { 
            this._Employee = value;
       }
}

另外,我建议您在类Section中实现构造函数,该构造函数将在其块中设置字段:

public class Section
    {
        public string Name { get; set; }
        public int Capacity { get; set; }
        public int MinimumStaffing { get; set; }
        public int IdealStaffing { get; set; }
        public Section(string name, List<Person> employee)
        {
            this.Name = name;
            this._Employee = employee;
        }
        public Section()
        {
            this._Employee = new List<Person>(); //if you call the empty constructor, create the list
        }
        private List<Person> _Employee; 
        public List<Person> Employee
        {
            get
            {
                return this._Employee;
            }
            set
            {
                this._Employee = value;
            }
        }
    }

然后您可以将通话更改为:

Sektioner.Section.Add(new Section(sektionsNamn, Sektion.Employee));

我发现它更直接,很少会导致类似的错误。