重写ToString()方法异常:输出List类型而非电影信息求助
解决List输出默认类型名的问题
嘿,我一眼就看出问题所在啦!你现在肯定是直接把整个List<Movie>对象丢给文本框输出了对吧?
问题根源
虽然你已经在Movie类里重写了ToString(),但List本身的ToString()方法默认只会返回它的类型全称(就是你看到的System.Collections.Generic.List1[Problem_2.Movie]`),它不会自动帮你遍历每个Movie去调用它们的自定义ToString()。
第一步:先完善你的Movie类(补全代码+确保ToString()正确)
先把你没写完的duration属性补全,然后确保ToString()重写到位:
class Movie { private string movieName { get; set; } private int number { get; set; } private string releaseDate { get; set; } private string location { get; set; } private string genre { get; set; } private int rating { get; set; } private int duration { get; set; } // 补全set访问器 // 重写ToString,返回你想要的电影信息格式 public override string ToString() { // 这里可以根据你的需求调整格式,比如换行或者用分隔符 return $"【电影】{movieName} | 编号:{number} | 上映日期:{releaseDate} | 类型:{genre} | 评分:{rating}/10 | 时长:{duration}分钟"; } }
第二步:正确输出List里的所有电影信息
不要直接输出List对象,要遍历每个Movie,把它们的ToString()结果拼接起来再输出到文本框,推荐两种简单方法:
方法1:用string.Join快速拼接(最简洁)
// 假设你的电影列表是movieList List<Movie> movieList = new List<Movie>(); // 先往列表里添加电影数据... // 用换行符把每个电影的信息拼接成一个字符串 string allMovieInfo = string.Join(Environment.NewLine, movieList); // 赋值给文本框 yourTextBoxName.Text = allMovieInfo;
方法2:用StringBuilder遍历拼接(适合复杂格式)
如果后续要加更多格式处理,用StringBuilder更高效:
StringBuilder sb = new StringBuilder(); foreach (Movie movie in movieList) { sb.AppendLine(movie.ToString()); // 还可以加分割线之类的:sb.AppendLine("------------------------"); } yourTextBoxName.Text = sb.ToString();
这样操作后,文本框里就会显示每个电影的详细信息,而不是那个讨厌的类型名啦!
内容的提问来源于stack exchange,提问作者DGMX
相关产品推荐
相关产品推荐

