C#控制台程序向列表存储值重复执行命令后数据消失如何修复
问题根源
你猜测的private List<MainRecord> record = new List<MainRecord>();这一行没有问题,导致数据每次清空的核心原因是:所有操作执行完成后都递归调用了Main()方法。Main方法中每次执行都会运行logic = new BusinessLogic(new MemoryDataSource());,相当于每次操作结束都创建了一个全新的空数据源,之前存储的所有数据自然会丢失。
修复方案
步骤1:移除所有操作方法末尾的Main()调用
你原本的Main方法已经内置了while循环,执行完任意操作后会自动回到循环开头打印菜单、等待新命令,不需要手动调用Main回到主逻辑。
修正后的操作方法示例:
static void SaveListId(){ Console.WriteLine("Addres: "); string Newaddress = Console.ReadLine(); Console.WriteLine("List of planned events: "); string Newactivity = Console.ReadLine(); Console.WriteLine("Date 1: "); string Newdata_1 = Console.ReadLine(); Console.WriteLine("Date 2: "); string Newdata_2 = Console.ReadLine(); logic.SaveList(new Program{address = Newaddress, activity = Newactivity, data_1 = Newdata_1, data_2 = Newdata_2}); // 删除原本这里的Main();调用 } static void PrintListId(){ // 补全你的查询逻辑后也不要加Main();调用 } static void Delete(){ // 补全你的删除逻辑后也不要加Main();调用 } static void PrintList(){ List<MainRecord> list = logic.GetList(); foreach(MainRecord record in list){ Console.WriteLine($"ID: {record.id} 地址: {record.address} 活动: {record.activity} 日期1: {record.data_1} 日期2: {record.data_2}"); } // 删除原本这里的Main();调用 }
步骤2(可选优化):修复业务逻辑层重复添加记录的问题
你当前BusinessLogic的SaveList方法存在重复添加逻辑:dataSource.Save已经完成了记录存入列表的操作,不需要再手动调用list.Add,修改后代码如下:
public List<MainRecord> SaveList(MainRecord record){ dataSource.Save(record); return dataSource.GetAll(); }
修改后可以避免同一条记录被重复存储两次。
完成以上修改后,数据源只会在程序启动时初始化一次,多次执行添加命令数据会正常累计存入列表。
内容的提问来源于stack exchange,提问作者LovecraftCat
相关产品推荐
相关产品推荐

