2

電話帳を作ることになっていたので、宿題に困っています。条件は、次のようになっていることです。

Class Phonebook   
{
    private List<Entry> _phoneList;
    public Phonebook()
    {
       //instance of _phoneList
    }
    public void AddEntry (string name, string number)
    {
       //logic
    }
    public string FindEntry (string namne)
    {
       //logic
    }
}

class Entry
{
  public string Name{ get; private set; }
  public string Number{ get; private set; }
}

AddEntryただし、メソッドにエントリリストに新しい名前/番号を割り当てる方法がわかりません_phoneList。私はたくさん試しましたが、役に立ちませんでした。それを機能させるためのヒントはありますか?どんな助けでも大歓迎です!

これまでの私のコードは次のようになります

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace app3
{
    public partial class Form1 : Form
    {
        private Phonebook phonebook;
        public Form1()
        {
            InitializeComponent();
            phonebook = new Phonebook();
        }
            private void addEntryButton_Click(object sender, EventArgs e)
        {
            phonebook.AddEntry((addNameTextBox.Text), (addNumberTextBox.Text));
        } 
    } 
    class Phonebook
    {
        private List<Entry> _phoneList;
        public Phonebook()
        {  
            List<Entry> _phoneList = new List<Entry>(); 
        }
        public void AddEntry(string name, string number)
        {
        }
    }
    class Entry
    {
        public string Name { get; private set; }
        public string Number { get; private set; }
    }
}
4

2 に答える 2

2

_phoneListは のコレクションであるためEntry、新しいインスタンスを作成してリストに追加する必要があります。

Entry entry = new Entry();
entry.Name = name;
entry.Number = number;
_phoneList.Add(entry);

ただし、Entry にはプロパティのプライベート セッターがあるため、名前と番号を取得する新しいコンストラクターを追加し、代わりにそこに設定する必要があります。

class Entry
{
    public Entry(string name, string number)
    {
       Name = name;
       Number = number;
    }

    public string Name { get; private set; }
    public string Number { get; private set; }
}

そして、それは単に

_phoneList.Add(new Entry(name, number));

編集:

private List<Entry> _phoneList;
public Phonebook()
{  
  List<Entry> _phoneList = new List<Entry>(); 
}

_phoneList をプライベート フィールドとして宣言しますが、元のフィールドを隠すコンストラクターで再宣言します。

_phoneList後でAddEntry メソッドで使用すると、初期化されていないフィールドが取得されます。コンストラクタを次のように変更します

_phoneList = new List<Entry>();
于 2012-11-21T18:50:25.867 に答える
1

次のコンストラクタを作成する必要がありますEntry

public Entry(string name, string number)
{
    Name = name;
    Number = number;
}

AddEntry次に、メソッドでこのコンストラクターを使用できます。

public void AddEntry (string name, string number)
{
    _phoneList.Add(new Entry(name, number));
}
于 2012-11-21T18:52:44.200 に答える