C#读取CSV文件输出班级学生成绩仅显示1人问题求助
代码问题说明与修改方案
核心问题
- 现有代码仅调用了1次
ReadLine()方法,仅读取到CSV文件的第一行数据,没有遍历所有行,因此只能输出1名学生的信息 - 代码存在数组长度硬编码、重复打开CSV文件两次的不合理逻辑,和CSV每行对应1名学生的存储结构不匹配
推荐修改方案
步骤1:定义学生数据结构(可选,便于维护)
public class Student { public string Name { get; set; } public int Mark { get; set; } }
步骤2:合并读取逻辑,一次遍历所有行
替换原有的loadNames、loadMarks两个方法,避免重复打开文件:
static List<Student> LoadStudents() { string filename = @"testMarks.csv"; List<Student> students = new List<Student>(); using (StreamReader currentfile = new StreamReader(filename)) { string line; // 循环读取直到文件末尾 while ((line = currentfile.ReadLine()) != null) { if (string.IsNullOrWhiteSpace(line)) continue; string[] lineItems = line.Split(','); if (lineItems.Length < 2) continue; students.Add(new Student { Name = lineItems[0].Trim(), Mark = int.Parse(lineItems[1].Trim()) }); } } return students; }
步骤3:修改Main方法调用逻辑
public static void Main(string[] args) { var students = LoadStudents(); OutputMarks(students); Console.ReadKey(); }
步骤4:重写输出方法,移除硬编码的循环长度
static void OutputMarks(List<Student> students) { Console.WriteLine("姓名\t分数"); foreach (var stu in students) { Console.WriteLine($"{stu.Name}\t{stu.Mark}"); } }
最小改动方案(不改变原有代码结构)
如果不想调整原有代码框架,仅修改以下点位即可:
- 在
loadNames方法中添加循环读取所有行,将姓名存入动态列表,不要固定数组长度为2 - 在
loadMarks方法中添加循环读取所有行,提取对应分数字段,不要仅读取第一行 - 在
outputMarks方法中,循环判断条件改为数组的Length属性,不要硬编码固定数值2、6
内容的提问来源于stack exchange,提问作者Jenser
相关产品推荐
相关产品推荐

