类内读取XML文件失效问题:LoginInfo类Load方法异常排查
问题原因
你的Load方法无法正常工作的核心原因是C#中引用类型的参数默认是值传递——你传入的数组引用会被复制一份到方法内部,在方法里给arr赋值新的数组对象,只会修改这个副本引用,外部的数组变量根本不会接收到这个新对象。
解决方案
有两种常用的修复方式:
方式一:使用ref关键字传递参数
修改Load方法的参数,加上ref关键字,这样就能直接修改外部的数组变量:
public static void Load(ref LoginInfo[] arr) { string file = @"LoginInfo.xml"; XmlSerializer fSrl = new XmlSerializer(typeof(LoginInfo[])); // 使用using自动释放文件流资源,避免异常时流未关闭 using (FileStream fStr = new FileStream(file, FileMode.Open)) { arr = (LoginInfo[])fSrl.Deserialize(fStr); } Console.WriteLine("information loaded"); }
调用时需要在参数前加上ref:
LoginInfo[] userArr = null; LoginInfo.Load(ref userArr);
方式二:让Load方法返回数组对象
直接让Load方法返回反序列化后的数组,这种方式更直观,也避免了ref参数的使用:
public static LoginInfo[] Load() { string file = @"LoginInfo.xml"; XmlSerializer fSrl = new XmlSerializer(typeof(LoginInfo[])); using (FileStream fStr = new FileStream(file, FileMode.Open)) { return (LoginInfo[])fSrl.Deserialize(fStr); } }
调用时直接接收返回值:
LoginInfo[] userArr = LoginInfo.Load();
额外优化建议
- 所有文件流操作都应该用
using语句包裹,确保资源能被正确释放,避免内存泄漏。 - 可以添加异常处理逻辑,比如捕获
FileNotFoundException(文件不存在时)、InvalidOperationException(XML格式错误时)等,提升程序的健壮性。
内容的提问来源于stack exchange,提问作者DJPT
相关产品推荐
相关产品推荐

