Я изучал пространство имен коллекций на С#, поэтому делал некоторые небольшие самодельные проекты для изучения.
Я сделал приложение для гонки на машине, где вы вводите имя, автомобиль и место гонщика, которое затем хранится в списке массивов. Я могу извлечь содержимое списка массивов в консольное окно, но я хотел бы знать, как я могу писать и сохранять его в текстовом файле (вроде мини-базы данных).
Я знаю, что каждый элемент, хранящийся в списке массивов, хранится как объект, поэтому для извлечения их необходимо использовать их для их соответствующих типов.
Вот как мой список массивов обрабатывает входы:
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
Является ли результатом недействительного каста или просто что-то, что я пропустил?
Спасибо
Ну, вы можете сделать:
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>
для безопасности типов и для многих других преимуществ...
Для записи всех элементов массива требуется цикл:
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());
}
ArrayList
. Вы обнаружите, что редко требуется использоватьArrayList
для хранения списка объектов.XmlSerializer
илиDataContractSerializer
), потому что это решит многие проблемы, которые в противном случае вам придется решать вручную.