多次调用OverviewTable方法重复显示前5条记录的求助
问题排查与修复方案
核心原因
你遇到的重复显示问题,本质是ConsoleTableExt的表格构建对象被复用,未在每次调用时重新初始化。比如如果把ConsoleTableBuilder或相关配置对象设为类的静态成员,每次调用OverviewTable时都会在原有数据基础上追加内容,而非生成全新表格。
具体修复步骤
重构
OverviewTable方法的表格构建逻辑
确保每次调用方法时都新建ConsoleTableBuilder实例,绝对不要复用类级别的全局对象。示例代码对比:// 错误写法(复用静态builder,导致重复追加) private static ConsoleTableBuilder _globalBuilder; public void OverviewTable(List<Session> sessions) { _globalBuilder.AddColumn(new[] {"ID", "开始时间", "结束时间", "时长"}); foreach(var s in sessions) { _globalBuilder.AddRow(s.Id, s.StartTime, s.EndTime, s.Duration); } _globalBuilder.Write(); } // 正确写法(每次调用都创建新的builder) public void OverviewTable(List<Session> sessions) { // 方式1:直接从列表构建 var table = ConsoleTableBuilder.From(sessions) .WithColumn("ID", "开始时间", "结束时间", "时长") .WithFormat(ConsoleTableBuilderFormat.Minimal); table.Write(); // 方式2:手动构建行 // var tableBuilder = new ConsoleTableBuilder(); // tableBuilder.AddColumn(new[] {"ID", "开始时间", "结束时间", "时长"}); // foreach(var s in sessions) tableBuilder.AddRow(s.Id, s.StartTime, s.EndTime, s.Duration); // tableBuilder.Write(); }排查静态集合或缓存
检查代码中是否存在静态的行数据集合(比如private static List<object[]> _tableRows),如果每次调用时未清空就追加,也会导致重复。必须在每次构建表格前重新初始化行集合。验证传入的列表
虽然你确认sessions列表始终是19条,但可以在OverviewTable开头加一行打印:Console.WriteLine($"当前会话数:{sessions.Count}");,再次确认每次调用时传入的列表数据正确,排除数据传入环节的问题。
额外建议
不要依赖ConsoleTableBuilder的Clear()方法(如果存在)来清理数据,最稳妥的方式就是每次调用都新建builder实例,从根源避免复用导致的追加问题。
内容的提问来源于stack exchange,提问作者Furiax
相关产品推荐
相关产品推荐

