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方法为 Entry list 分配新的名称/编号_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

由于_phoneListEntry's 的集合,因此您需要创建一个新实例并将其添加到列表中。

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 回答