我在完成家庭作业时遇到了麻烦,我们是不是应该制作电话簿。条件是它应该是这样的:
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; }
}
}
答案 0 :(得分: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声明为私有字段,但随后在隐藏原始字段的构造函数中重新声明它。
稍后在AddEntry方法中使用_phoneList
时,您将获得未初始化的字段。将构造函数更改为
_phoneList = new List<Entry>();
答案 1 :(得分: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));
}