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

如何用C#循环实现电影对象列表的多字段搜索?

C#电影库多字段搜索实现方案

问题背景

开发C#控制台应用,需通过循环实现对电影对象列表的任意数据字段搜索,现有代码存在语法及逻辑问题导致功能失效。

现有代码问题分析

1. 电影列表初始化语法错误

原始代码中列表未正确创建Movie对象,且缺少对象间的逗号分隔:

// 错误写法
public static List<Movie> Movies= new List<Movie>() 
{
(1, "The Shawshank Redemption", "Drama", 1994, "Tim Robbins", "9.3/10")
(2, "The Godfather", "Crime", 1972, "Marlon Brando", "9.2/10")
}

2. 搜索方法逻辑缺陷

  • userInput.ToLower()未重新赋值:字符串是不可变类型,该调用不会修改原变量值
  • 遍历类型不匹配:Movies是List<Movie>集合,却用Film类型遍历
  • 依赖ToString()判断匹配不可靠:默认ToString()仅返回类型名称,无法覆盖所有字段内容
  • 注释中的多字段匹配逻辑未完整实现

修正后的完整实现

第一步:定义Movie类

先确保Movie类包含对应字段及构造函数:

public class Movie
{
    public int ID { get; set; }
    public string Title { get; set; }
    public string Genre { get; set; }
    public int Year { get; set; }
    public string MainActor { get; set; }
    public string IMDB_Rating { get; set; }

    public Movie(int id, string title, string genre, int year, string mainActor, string imdbRating)
    {
        ID = id;
        Title = title;
        Genre = genre;
        Year = year;
        MainActor = mainActor;
        IMDB_Rating = imdbRating;
    }

    // 重写ToString用于格式化输出
    public override string ToString()
    {
        return $"ID: {ID}, 标题: {Title}, 类型: {Genre}, 年份: {Year}, 主演: {MainActor}, 评分: {IMDB_Rating}";
    }
}

第二步:正确初始化电影列表

public static List<Movie> Movies = new List<Movie>()
{
    new Movie(1, "The Shawshank Redemption", "Drama", 1994, "Tim Robbins", "9.3/10"),
    new Movie(2, "The Godfather", "Crime", 1972, "Marlon Brando", "9.2/10")
};

第三步:实现多字段搜索方法

public static void Search()
{
    Console.WriteLine("Enter input value: ");
    string userInput = Console.ReadLine()?.ToLower() ?? string.Empty;

    bool found = false;
    foreach (Movie movie in Movies)
    {
        // 检查所有字段是否包含搜索关键词(忽略大小写)
        bool isMatch = movie.ID.ToString().Contains(userInput)
                      || movie.Title.ToLower().Contains(userInput)
                      || movie.Genre.ToLower().Contains(userInput)
                      || movie.Year.ToString().Contains(userInput)
                      || movie.MainActor.ToLower().Contains(userInput)
                      || movie.IMDB_Rating.ToLower().Contains(userInput);

        if (isMatch)
        {
            found = true;
            Console.WriteLine("找到匹配项!");
            Console.WriteLine(movie.ToString());
        }
    }

    if (!found)
    {
        Console.WriteLine("未找到匹配的电影");
    }
}

关键优化点说明

  • 统一字符串大小写:将用户输入和所有字段转换为小写,实现不区分大小写的搜索
  • 逐字段匹配:明确检查每个数据字段,避免依赖不可靠的ToString()方法
  • 处理空输入:使用?.ToLower() ?? string.Empty防止用户输入为空时出现空引用异常
  • 添加未匹配提示:明确告知搜索结果状态,提升用户体验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:15:31