FileIO из ArrayList

1

Я изучал пространство имен коллекций на С#, поэтому делал некоторые небольшие самодельные проекты для изучения.

Я сделал приложение для гонки на машине, где вы вводите имя, автомобиль и место гонщика, которое затем хранится в списке массивов. Я могу извлечь содержимое списка массивов в консольное окно, но я хотел бы знать, как я могу писать и сохранять его в текстовом файле (вроде мини-базы данных).

Я знаю, что каждый элемент, хранящийся в списке массивов, хранится как объект, поэтому для извлечения их необходимо использовать их для их соответствующих типов.

Вот как мой список массивов обрабатывает входы:

class People
{
    public string Name { get; set; }
    public string Car { get; set; }
    public string Place { get; set; }

    public ArrayList myList = new ArrayList();

    public void ShowList()
    {
        for (int i = 0; i < myList.Count; i++)
        {
            Console.WriteLine("" + myList[i] + "\n|");
        }          
    }

    public void AddToList()
    {          
        myList.Add("Name: " + Name + " Car: " + Car + " Place: " + Place);            
    }

}

Вот как я пытаюсь сохранить myList в текстовом файле:

private void button3_Click(object sender, EventArgs e)
    {
        using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\Keil\Documents\Visual Studio 2013\Projects\CarRacingArrList\racers.txt"))
        {
            file.WriteLine(person.myList.ToString());
        }
    }

Я добавил метод ToString(), чтобы вывести все элементы внутри myList в строку.

Выход, который я получаю в своем текстовом файле, выглядит так: System.Collections.ArrayList

Является ли результатом недействительного каста или просто что-то, что я пропустил?

Спасибо

  • 3
    Вам нужно написать каждый элемент отдельно. Кстати, используйте вместо этого универсальные коллекции (представленные в .NET 2.0) или ArrayList . Вы обнаружите, что редко требуется использовать ArrayList для хранения списка объектов.
  • 0
    Кроме того, если целью этого кода является сохранение данных на диске, чтобы вы могли загрузить их позже, изучите различные альтернативы сериализации в .NET (например, XmlSerializer или DataContractSerializer ), потому что это решит многие проблемы, которые в противном случае вам придется решать вручную.
Показать ещё 1 комментарий
Теги:
arraylist
collections
file-io

2 ответа

2
Лучший ответ

Ну, вы можете сделать:

file.WriteLine(string.Join(Environment.NewLine, myList.OfType<string>()));

Или без StreamWriter:

private void button3_Click(object sender, EventArgs e)
{
   File.WriteAllLines("path", myList.OfType<string>());
}

Вызов ToString на ArrayList дает вам имя типа, поскольку это поведение по умолчанию для ToString, если тип не переопределяет метод ToString, имя типа возвращается по умолчанию.

Помимо этого, не используйте ArrayList, используйте общий List<T> для безопасности типов и для многих других преимуществ...

0

Для записи всех элементов массива требуется цикл:

using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\Keil\Documents\Visual Studio 2013\Projects\CarRacingArrList\racers.txt"))
{
    foreach(var item in myList)
        file.WriteLine(var.ToString());
}

Ещё вопросы

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