如何修复System.Collections.Generic.List?

时间:2018-11-25 13:51:10

标签: c# arraylist streamwriter

所以基本上我想将列表数据保存到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 :(得分:0)

正如克劳斯·古特(KlausGütter)所说,您每次必须创建一个新的Autok实例。为了正确保存它,我想您必须重写Autok的ToString方法。

答案 1 :(得分:0)

button3_Click click事件中,您正在将全局变量“ a”而不是迭代器“ item”写入文件。如果将“ a”更改为“ item”,您仍将无法获得预期的结果。正如Klaus所说,您可以覆盖Autok对象的ToString()方法,但是我认为一个更好的主意是使用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...
}

答案 2 :(得分:0)

尝试

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

                sW.Close();
            }