C#:while循环向List存字符串后打印异常问题求助
问题排查与解决方案
核心问题分析
- 背包内容打印错误:直接拼接
backpackContent与字符串时,List的默认ToString()方法返回的是类型全称(即System.Collections.Generic.List1[System.String]`),而非列表内的实际元素。 - 空背包判断逻辑失效:case 2中错误判断
menuSelection == "",此时用户已选择选项2,menuSelection的值为"2",永远不会触发空背包提示,应改为判断背包列表是否为空。 - 清空背包功能未实现:case 3仅输出提示文字,未执行实际的清空操作。
修复后的完整代码
using System; using System.Collections.Generic; namespace backpack_stackoverflow { internal class Program { static void Main(string[] args) { bool controllBool = true; List<string> backpackContent = new List<string>(); while (controllBool) { Console.WriteLine("Welcome to the backpack."); Console.WriteLine("[1] Add an item to backpack"); Console.WriteLine("[2] Print backpack content"); Console.WriteLine("[3] Clear backpack content"); Console.WriteLine("[4] Exit"); string menuSelection = Console.ReadLine(); switch (menuSelection) { case "1": Console.WriteLine("Add something to the backpack: "); string addedItem = Console.ReadLine(); backpackContent.Add(addedItem); Console.WriteLine($"You have added a {addedItem} to the backpack!"); break; case "2": if (backpackContent.Count == 0) { Console.WriteLine("The backpack is empty. Add something by pressing menu selection 1."); } else { string items = string.Join(", ", backpackContent); Console.WriteLine($"The backpack contains: {items}."); } break; case "3": backpackContent.Clear(); Console.WriteLine("You have cleared the backpack! Add something by pressing menu selection 1."); break; case "4": controllBool = false; break; default: Console.WriteLine("It seems you have made an invalid selection. Please make a selection between 1-4."); break; } } } } }
关键修改说明
- 打印逻辑优化:使用
string.Join(", ", backpackContent)将列表元素用逗号分隔拼接成可读字符串,替代直接拼接List对象。 - 空判断修正:将case 2中的判断条件改为
backpackContent.Count == 0,正确检测背包是否为空。 - 清空功能补全:在case 3中添加
backpackContent.Clear(),实际执行清空背包的操作。
内容的提问来源于stack exchange,提问作者Silverbear
相关产品推荐
相关产品推荐

