如何用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
相关产品推荐
相关产品推荐

