无法将数据从文本文件传输到列表集合(和类?)

时间:2014-08-21 09:34:22

标签: c# .net winforms list

有人可以帮助我吗?我已经完成了每一条线,但是我无法弄清楚我错过了什么。没有错误,但是当我运行它时,根本不会填充列表。只有这一行" Project.ContactDetails"重复文本文件中总行数的次数,我认为这意味着列表中填充了""对于文本文件中的每一行数据,而不是数据本身(而不是Mary,Jane,John,列表得到"","","& #34)。我查看了其他类似的案例,包括MSDN示例,从技术上复制了他们的代码,但列表中仍然没有。

或者,如果有链接,你可以建议我阅读,这样我可以更好地理解列表和类,这将是非常棒的。我读了很多,但它们大多都很简单,列表只包括名字(Mary,Jane,John),不是这样的(John Farmer,25 Pitt Street,99887766; Mary Jane,26 Argyle Road,97776652 )。

*拉我的头发 - 出去买假发 - 会回来的。

public partial class frmContact : Form
{
    //declare file, class and list
    string fileName = Directory.GetCurrentDirectory() + "\\Contacts.txt";
    List<ContactDetails> CList = new List<ContactDetails>()

    public frmContact()
    {
        InitializeComponent();
    }

    //-------------------//
    // LOAD CONTACT FORM //
    //-------------------//
    private void frmContact_Load(object sender, EventArgs e)
    {

        //create Contacts.txt if it does not exist
        if (!File.Exists(fileName))
        {
            File.Create(fileName).Close();
            MessageBox.Show("New " + fileName +"  Has Been Created");
        }
        //if file already exists
        else
        {
            StreamReader readOb = new StreamReader(fileName);
            using (readOb)
            {
                while (!readOb.EndOfStream)
                {
                    string rdLine = readOb.ReadLine(); //read data in file by line
                    string[] tmpArr = rdLine.Split(',');
                    lbContact.Items.Add(tmpArr[0]+","+tmpArr[1]);
                    CList.Add(new ContactDetails() { Last = tmpArr[0], First = tmpArr[1] });
                }
            }
            //check if list populated
            int counter = 0;
            foreach (ContactDetails item in CList)
            {
                listBox1.Items.Add(item+counter.ToString());
                counter++;
            }

        }
        tbLast.Select(); // set cursor to Surname textbox
    }
}

class ContactDetails
{
    public string Last {get; set;}
    public string First { get; set; }
    public string Addr { get; set; }
    public string Sub { get; set; }
    public string Post { get; set; }
    public string Email { get; set; }
    public string Phone { get; set; }
    public string Mob { get; set; }
}

1 个答案:

答案 0 :(得分:2)

问题在于填充列表的循环。

foreach (ContactDetails item in CList)
{
    listBox1.Items.Add(item+counter.ToString());
    counter++;
}

此处隐式调用的item.ToString()的结果是类的名称(在本例中为Project.ContactDetails)。

您可以覆盖实体类中的.ToString()方法(Project.ContactDetails)以返回正确的文本,或者可以将item.First添加到列表中,这将添加名字。

foreach (ContactDetails item in CList)
{
    listBox1.Items.Add(item.First + counter++);
}