首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免使用数据初始化列表

避免使用数据初始化列表
EN

Stack Overflow用户
提问于 2017-09-08 21:59:42
回答 1查看 54关注 0票数 0

所以我有两种形式。form1有一个按钮来打开form2。在form2中,我有一个元素列表,我用在form2中创建的元素填充这些元素。我的问题是,当我关闭我的form2并重新打开它时,我的列表是空的。我知道这是因为我再次初始化了我的列表(ListaComida = new List<Comida>();),所以我删除了我的数据,但是我不知道如何解决这个问题。

我的代码

Form1

代码语言:javascript
复制
public partial class Form1 : Form

{

    public Form1()
    {
        InitializeComponent();
}


    private void addDia_Click(object sender, EventArgs e)
    {

        string dia = (DateTime.Today.ToString("dd/MM/yyyy"));
        TabPage myTabPage = new TabPage(dia);
        tabControl1.TabPages.Add(myTabPage);
    }

    private void AddComida_Click(object sender, EventArgs e)
    {
        FormAddComida addComida = new FormAddComida();
        DialogResult resultaod = addComida.ShowDialog();
    }
}

Form2

代码语言:javascript
复制
public partial class FormAddComida : Form
    {
        public List<Comida> ListaComida;

        public FormAddComida()
        {
            InitializeComponent();
            ListaComida = new List<Comida>();

        }

        private void addComidaAdicionar_Click(object sender, EventArgs e)
        {
            Comida comidaAdicionada = new Comida(tbNome.Text,
                Convert.ToInt32(tbCalorias.Text),
                Convert.ToInt32(tbHidratos.Text),
                Convert.ToInt32(tbProteinas.Text),
                Convert.ToInt32(tbGorduras.Text)
                );

            ListaComida.Add(comidaAdicionada);
            RefreshListaComida();

        }

        private void RefreshListaComida()
        {

            lbListaComida.Items.Clear();
            lbListaComida.Items.AddRange(ListaComida.ToArray());

        }

        private void AddComidaCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-08 22:16:26

您可以使用MemoryCache,即使您关闭表单,您的列表也将留在内存中,并且可以按键检索。但是,如果您需要永久保存这些数据(或长时间运行应用程序),我建议您存储在DB中。

代码语言:javascript
复制
    using System.Runtime.Caching;

    private ObjectCache cache = MemoryCache.Default;

    public class Food
    {
        public string Name { get; set; }
        public double Price { get; set; }
    }

    public void AddFood()
    {
        FoodList.Add(new Food { Name = "Pizza", Price = 10 });
        FoodList.Add(new Food { Name = "Fries", Price = 5 });

        cache.Add("UserCacheFood", FoodList, DateTimeOffset.MaxValue);
    }

    public List<Food> ReturnListFromCache()
    {
        return (List<Food>)cache.Get("UserCacheFood");
    }

    private void button1_Click(object sender, EventArgs e)
    {
        AddFood();
        var result = ReturnListFromCache();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        var ret2 = ReturnListFromCache();
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46125048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档