C#图书查询函数无法输出指定对象值问题求助
图书馆查询函数故障排查与修复
核心问题分析
1. 图书未加入图书馆列表
你创建了示例图书对象,但没有将其添加到library列表中,导致列表为空,Lookup里的foreach循环根本不会执行,自然无法输出任何图书信息。
2. 查询逻辑错误
当前代码中,每遍历一本不匹配的图书就输出“Boken finns inte i biblioteket”,这会导致:
- 若列表中有多本书,匹配的书会被输出,但不匹配的每一本都会触发错误提示
- 若列表为空,不会有任何输出,用户根本不知道哪里出问题
3. 大小写匹配问题
你将用户输入转成了小写,但图书的titel和author保留原大小写,比如图书标题是"Alex Bok",用户输入"alex"时,Contains会匹配失败,因为大小写不统一。
修复后的完整代码
图书类定义(无修改)
class Bok { public string titel; public string author; public bool loaned; public Bok(string titel, string author, bool loaned) { this.titel = titel; this.author = author; this.loaned = loaned; } }
图书馆列表初始化(添加图书到列表)
List<Bok> library = new List<Bok>(); // 将创建的图书添加到图书馆列表 Bok book = new Bok("alex bok", "alexander", false); library.Add(book); // 可添加更多测试图书 library.Add(new Bok("C# Guide", "John Doe", true));
查询与打印函数(修复逻辑与大小写匹配)
void Print(Bok bok) { Console.WriteLine("hej"); Console.WriteLine($"{bok.titel}\n" + $"{bok.author}\n" + $"Lånad : {bok.loaned}"); } void Lookup() { Console.WriteLine("Sök efter titel, eller författare"); string svar = Console.ReadLine().ToLower(); bool found = false; foreach(Bok bok in library) { // 将图书字段也转成小写,统一匹配规则 if (bok.author.ToLower().Contains(svar) || bok.titel.ToLower().Contains(svar)) { Print(bok); found = true; } } // 遍历完所有图书后,若未找到任何匹配项再提示 if (!found) { Console.WriteLine("Boken finns inte i biblioteket."); } }
修复说明
- 添加图书到列表:用
library.Add(book)将创建的图书对象加入图书馆集合,确保循环能遍历到图书。 - 调整查询提示逻辑:用
found标记是否找到匹配项,遍历结束后统一判断是否输出“未找到”提示,避免重复输出错误信息。 - 统一大小写匹配:将图书的
author和titel也转成小写后再调用Contains,确保大小写不敏感的查询。
内容的提问来源于stack exchange,提问作者21sili
相关产品推荐
相关产品推荐

