C#遍历List中字符串数组时修改元素,循环迭代异常求助
问题分析与修复方案
原代码核心问题
- 嵌套循环逻辑混乱:外层
foreach和内层for循环嵌套,导致每次foreach迭代都会完整跑一遍整个for循环,直接跳到最后一个元素。 - 数组索引错误:
minBlogg[i][i]会随着i的变化取数组不同位置的元素(比如i=1时取数组第1位,i=2时取第2位),但你每个帖子数组是固定3个元素(标题、内容、其他),应该用固定索引(比如[0]存标题)。 continue使用错误:选"下一个帖子"时用continue,会直接跳过当前for循环剩余代码进入下一次迭代,结合外层循环,直接导致跳到最后一个元素。- 返回主菜单逻辑失效:选3时只跳出
switch,没有退出整个循环,程序会继续执行。
修复后的代码
void Redigera() { // 用变量跟踪当前显示的帖子索引 int currentIndex = 0; // 保持交互直到用户选择返回主菜单 while (true) { // 检查索引是否越界(防止最后一个帖子选下一个) if (currentIndex >= minBlogg.Count) { Console.WriteLine("已经是最后一个帖子了!"); Console.ReadKey(); Console.Clear(); currentIndex = minBlogg.Count - 1; continue; } string[] currentPost = minBlogg[currentIndex]; Console.WriteLine("----------------------------"); // 固定索引取标题(假设数组[0]是标题,[1]是内容) Console.WriteLine(currentPost[0]); Console.WriteLine("----------------------------"); Console.WriteLine("[1]. Redigera"); Console.WriteLine("[2]. Nästa inlägg"); Console.WriteLine("[3]. Återgå till Huvudmeny"); string val = Console.ReadLine(); Console.Clear(); switch (val) { case "1": Console.Write("Redigera titel: "); currentPost[0] = Console.ReadLine(); Console.Write("Redigera inlägg: "); currentPost[1] = Console.ReadLine(); Console.WriteLine("Ditt inlägg har sparats!"); Console.ReadKey(); Console.Clear(); break; case "2": // 移动到下一个帖子,只需索引+1 currentIndex++; break; case "3": // 直接退出循环,返回主菜单 return; default: Console.WriteLine("Ogiltigt val! Tryck på en tangent för att fortsätta..."); Console.ReadKey(); Console.Clear(); break; } } }
修复要点说明
- 用单个
while循环控制交互流程,通过currentIndex跟踪当前帖子,逻辑更清晰。 - 固定数组索引(
currentPost[0]标题、currentPost[1]内容),避免索引错误。 - 处理"下一个帖子"时直接
currentIndex++,并添加越界检查,防止索引超出范围。 - 选3时用
return直接退出方法,回到主菜单。 - 添加默认选项的提示,提升用户体验。
内容的提问来源于stack exchange,提问作者Ikkicrow
相关产品推荐
相关产品推荐

