求助:将Course类对象数组属性写入文本文件时出现空值问题
问题解决:导出Course实例属性到文本文件为空的修复
你这问题一眼就能看出来——在ExportCourses方法里,你错误地创建了一个全新的空Course对象,然后一直用这个空对象的属性来写文件,当然输出都是空值了!
核心错误点
看你这段代码:
Course aCourse = new Course(); for(int i =0; i<numberOfCourses;i++) { writer.WriteLine("{0}{1}{2}{1}{3}{1}{4}", aCourse.CourseCode, Delim, aCourse.Name, aCourse.Description, aCourse.NoOfEvaluations); }
这里的aCourse是你新new出来的,和你之前添加到courseMng里的prog1、prog2完全没关系,它的所有属性都是默认值(空字符串、0),所以写出来的内容自然都是空的。
修复方案
把循环里的代码改成直接取courses数组里的真实课程对象就行:
修改后的ExportCourses方法
public void ExportCourses(string fileName, char Delim) { // 用using语句自动管理流资源,不用手动关闭 using (FileStream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write)) using (StreamWriter writer = new StreamWriter(stream)) { for(int i = 0; i < numberOfCourses; i++) { // 取出数组里当前索引的真实课程实例 Course currentCourse = courses[i]; writer.WriteLine("{0}{1}{2}{1}{3}{1}{4}", currentCourse.CourseCode, Delim, currentCourse.Name, currentCourse.Description, currentCourse.NoOfEvaluations); } } }
额外优化说明
我把原来的try-finally换成了using语句,这是C#里处理流资源的最佳实践——using会在代码块结束后自动调用流的Dispose方法,帮你关闭流,避免手动关闭可能遗漏的资源泄漏问题,代码也更简洁。
最后调用验证
别忘了在你的Main方法末尾加上调用代码,确保导出操作执行:
// 比如导出到courses.txt,用逗号作为分隔符 courseMng.ExportCourses("courses.txt", ',');
这样运行后,你的文本文件里就能看到prog1和prog2的真实属性值了。
内容的提问来源于stack exchange,提问作者Shivam
相关产品推荐
相关产品推荐

