You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.");
    }
}

修复说明

  1. 添加图书到列表:用library.Add(book)将创建的图书对象加入图书馆集合,确保循环能遍历到图书。
  2. 调整查询提示逻辑:用found标记是否找到匹配项,遍历结束后统一判断是否输出“未找到”提示,避免重复输出错误信息。
  3. 统一大小写匹配:将图书的author和titel也转成小写后再调用Contains,确保大小写不敏感的查询。

内容的提问来源于stack exchange,提问作者21sili

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 21:11:38