C#创建自定义类对象列表后遍历无输出问题排查求助
问题根因
你代码中List<TermItem>的元素添加逻辑位置错误,导致没有任何对象被成功存入列表,遍历输出自然为空。
具体看参数确认部分的代码结构:
while (confirmation != 'y' && confirmation != 'Y') { // 采集参数、询问是否确认 if (confirmation == 'y' || confirmation == 'Y') { break; // 确认正确直接跳出循环,不会执行后面的Add逻辑 } // 处理参数错误要重填的逻辑 // 只有参数填错的时候才会走到这里的Add逻辑,完全不符合预期 myItems.Add(new TermItem{...}); }
当用户确认参数正确时,直接执行break跳出了当前循环,myItems.Add()代码永远不会被触发,列表自始至终都是空的,所以foreach遍历没有任何输出。
修复方法
把myItems.Add()代码块移动到break之前,也就是用户确认参数正确后,先把对象存入列表再跳出循环:
if (confirmation == 'y' || confirmation == 'Y') { // 新增:确认参数正确后先添加对象到列表 myItems.Add(new TermItem { Id = i + 1, Area = area, Weight = mass*gravity, Planet = planet, TerminalV = (Math.Sqrt(2 * mass * gravity) / (Cd * P * area)), TimeToV = (Math.Sqrt(2 * mass * gravity) / (Cd * P * area) + area * dt) * (1 - Cd * dt) }); break; } // 原来放在循环末尾的Add代码块直接删掉即可
额外优化建议
你代码中所有类似"Please enter the mass of the " + i+1 + "th object"的字符串拼接存在运算符优先级问题,+是左结合运算符,会先拼接字符串和i,再拼接1,比如i=3时会输出错误的31th,改成"Please enter the mass of the " + (i+1) + "th object"即可正常显示序号。
内容的提问来源于stack exchange,提问作者Antiquia
相关产品推荐
相关产品推荐

