Как исправить System.Collections.Generic.List? - PullRequest
0 голосов
/ 25 ноября 2018

Так что я просто хочу сохранить список данных в csv. Но единственное, что сохраняется в файле: System.Collections.Generic.List`1 [WindowsFormsApp1.Autok], я не знаю точно, как это исправить, писательоблажался

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        List<Autok> aLista = new List<Autok>();
        Autok a = new Autok();
        public Form1()
        {
            InitializeComponent();

        }

        private void button2_Click(object sender, EventArgs e)
        {
            string NewGUID = System.Guid.NewGuid().ToString();
            tbTermekkod.Text = NewGUID.ToString();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            a.Termekkod = tbTermekkod.Text;
            a.Gyarto = tbGyarto.Text;
            a.Tipus = tbTipus.Text;
            a.Szin = tbSzin.Text;
            a.Felszereltsegiszint = tbFelsz.Text;
            a.Ar = Convert.ToInt32(tbAr.Text);
            aLista.Add(a);


        }

        private void button3_Click(object sender, EventArgs e)
        {

        using (StreamWriter sW = new StreamWriter(@"C:\Users\Tamás\source\repos\WindowsFormsApp1\WindowsFormsApp1\bin\Debug\rainbow.csv", false, Encoding.Default))
        {
            foreach (Autok item in aLista)
            {
                sW.WriteLine(a);
                sW.Close();
            }

        }

        }
    }
}

Ответы [ 3 ]

0 голосов
/ 25 ноября 2018

В событии button3_Click click вы записываете глобальную переменную "a" в свой файл вместо итератора "item".Если вы измените «a» на «item», вы все равно не получите ожидаемых результатов.Как сказал Клаус, вы можете переопределить метод ToString() вашего объекта Autok, но я думаю, что лучшей идеей будет использование библиотеки CSV (я настоятельно рекомендую CsvHelper ).Тогда вы можете изменить свой код на:

private void button3_Click(object sender, EventArgs e)
{
    using (StreamWriter sW = new StreamWriter(@"C:\Users\Tamás\source\repos\WindowsFormsApp1\WindowsFormsApp1\bin\Debug\rainbow.csv", false, Encoding.Default)
    {
        var csvWriter = new CsvWriter( sW);
        csvWriter.WriteRecords( aLista);
    }
}

Если вы не используете CsvHelper, вы можете переопределить ToString() и изменить его на:

private void button3_Click(object sender, EventArgs e)
{
    using (StreamWriter sW = new StreamWriter(@"C:\Users\Tamás\source\repos\WindowsFormsApp1\WindowsFormsApp1\bin\Debug\rainbow.csv", false, Encoding.Default))
    {
       foreach (Autok item in aLista)
       {
            sW.WriteLine(item.ToString());
            sW.Close();
       }
    }
}


public override string ToString()
{
    var comma = ",";
    return this.Termekkod + comma + this.Gyarto + comma + etc...
}
0 голосов
/ 25 ноября 2018

попробуйте

 foreach (Autok item in aLista)
            {
           sW.WriteLine(item.Termekkod +
                        item.Gyarto+ 
                        item.Tipus+ 
                        item.Szin+
                        item.Felszereltsegiszint + 
                        item.Ar+"");

                sW.Close();
            }
0 голосов
/ 25 ноября 2018

Как сказал Клаус Гюттер, вам нужно каждый раз создавать новый экземпляр Autok.И чтобы сохранить его правильно, я предлагаю вам переопределить метод ToString Autok.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...