我正在尝试创建一个以下列方式排列数据的自定义类: -
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属性,但它没有添加员工列表。
任何想法如何克服这个?
抱歉打扰并提前致谢。
答案 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));
我发现它更直接,很少会导致类似的错误。