You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

类内读取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 10:17:25