0

次の方法でデータを配置するカスタムクラスを作成しようとしています:-

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; }
    }

私がやろうとしていることは次のとおりです。-最初に:-セクション1の名前を取得し、それを文字列に保存します。2番目:-このセクション(セクション1)で各人の名前を取得します。3番目:-セクション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プロパティを追加しますが、従業員リストは追加しません。

これを克服する方法はありますか?

ご迷惑をおかけして申し訳ありません。

4

1 に答える 1

3

Employeeクラス内のプロパティのプロパティセッターは空であるため、このように呼び出すときSectionに何も割り当てません。あなたの例では、プロパティの次のコードがあります。_EmployeeSektioner.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));

私が見つけたものはもっと簡単で、同様のエラーにつながることはめったにありません。

于 2012-12-04T20:16:23.117 に答える