C# WPF中自定义类List<>导入文本数据后属性值全为0的问题
问题:读取文件封装对象时所有属性值均为0
我有一个内容格式为34;233;1的文本文件,同时定义了包含X、Y、i属性的my_points类。我想要逐行读取文件,将每行数据封装为my_points对象并添加到已声明的List<my_points>中。
目前代码没有语法错误,List的元素数量和文件行数一致,分割后的字符串也能正确获取数值,但所有my_points对象的属性值全是0,不知道原因。
我的代码如下:
List<my_points> my_point_list_read = new List<my_points>(); // 列表已提前初始化... public List<my_points> FiletoList() { System.IO.StreamReader my_streamreader = new System.IO.StreamReader("Textfile.txt"); string my_line; while ((my_line = my_streamreader.ReadLine()) != null) { try { string[] seperated = my_line.Split(';'); my_point_list_read.Add(new my_points(Convert.ToDouble(seperated[0]), Convert.ToDouble(seperated[1]), Convert.ToInt32(seperated[2]))); } catch { break; } } } // 自定义my_points类: public class my_points { public double X; public double Y; public int i; public my_points(double X, double Y, int i) { this.X = 0.0; this.Y = 0.0; this.i = 0; } }
问题原因
问题出在my_points类的构造函数里:你没有把构造函数接收的参数赋值给类的成员属性,而是直接将属性硬编码设置为0,不管传入什么参数,最终对象的属性都会是0。
修复方案
修改my_points的构造函数,将传入的参数赋值给类的属性:
public class my_points { public double X; public double Y; public int i; public my_points(double X, double Y, int i) { // 把参数赋值给类的成员属性 this.X = X; this.Y = Y; this.i = i; } }
额外优化建议
- 使用
using语句自动释放StreamReader资源,避免内存泄漏:
public List<my_points> FiletoList() { using (System.IO.StreamReader my_streamreader = new System.IO.StreamReader("Textfile.txt")) { string my_line; while ((my_line = my_streamreader.ReadLine()) != null) { try { string[] seperated = my_line.Split(';'); my_point_list_read.Add(new my_points(Convert.ToDouble(seperated[0]), Convert.ToDouble(seperated[1]), Convert.ToInt32(seperated[2]))); } catch (Exception ex) { // 不建议直接break,可记录异常后继续处理下一行 Console.WriteLine($"处理行时出错:{ex.Message}"); // continue; // 保留此行可跳过错误行,继续处理后续内容 } } } return my_point_list_read; // 原方法缺少返回语句,需要补充 }
- 原
FiletoList方法没有返回值,需要补充return my_point_list_read;才能符合方法签名的要求。 - catch块建议捕获具体异常类型并做日志记录,而不是直接break,避免因为某一行错误导致整个读取流程中断。
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

