Невозможно передать данные из текстового файла в коллекцию списков (и класс?)

1

Может ли кто-нибудь помочь мне. Я прошел через каждую линию, но просто не могу понять, что я пропустил. Нет ошибки, но когда я запускаю ее, как-то список вообще не заполняется. Только эта строка "Project.ContactDetails" повторяется столько раз, сколько общее количество строк в текстовом файле, что, я думаю, означает, что список заполняется "" для каждой строки данных в текстовом файле вместо самих данных (вместо Мэри, Джейн, Джон, список получил "", "", ""). Я рассмотрел другие подобные случаи, в том числе примеры MSDN, технически скопировал их код, но все еще ничего в списке.

Или если есть ссылки, которые вы можете предложить мне прочитать, чтобы я мог лучше понять список и класс, это было бы потрясающе. Я читал много, но все они в основном довольно просты: список состоит только из имен (Мэри, Джейн, Джон), а не что-то вроде этого (Джон Фармер, 25 Питт-стрит, 99887766, Мэри Джейн, 26 Аргайл-роуд, 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; }
}
  • 0
    Что-то делать с listBox1.Items.Add(item+counter.ToString()); что должен делать item + counter? просто удалите + счетчик и повторите попытку ..
  • 2
    Краткий ответ: отладка. Добавьте точку останова и следуйте коду.
Показать ещё 6 комментариев
Теги:
list
winforms

1 ответ

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++);
}
  • 0
    Благодарю. Просто интересно, item.First будет ссылаться на список коллекции или класс? Я думал, что список будет упоминаться как что-то вроде cList [0]? Я видел переопределение .ToString () в примере, я думаю, теперь я знаю, что это на данный момент. Спасибо.
  • 1
    item.First будет ссылаться на свойство First текущего элемента в списке, поэтому для каждого элемента должен отображаться различный текст.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню