You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:06:03