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

C# 静态List读文件赋值时报未初始化空引用错误如何解决

问题原因

你代码里的3个静态List字段仅完成了引用声明,没有进行实例化,引用类型的默认初始值为null,调用Add()方法时自然会触发空引用异常。

修复方案
  • 方案1:声明字段时直接初始化
class Log
{   
    // 声明的同时完成实例化
    static public List<string> varos = new List<string>();
    static public List<int> tav = new List<int>();
    static public List<int> n = new List<int>();

    public void Input()
    {
        // 用using包裹StreamReader自动释放资源
        using (var sr = new StreamReader("vartav.txt"))
        {
            while (!sr.EndOfStream)
            {
                string s = sr.ReadLine();
                string[] seged = s.Split(' ');
                // 增加格式校验,避免行格式错误触发索引越界
                if (seged.Length >= 2)
                {
                    Log.varos.Add(seged[0]);
                    Log.tav.Add(Convert.ToInt32(seged[1]));
                }
            }
        }
    } 
}
  • 方案2:在Input方法执行前初始化
    如果你的逻辑需要延迟初始化,可以在读取数据前先判断实例是否存在:
public void Input()
{
    // 空合并赋值语句,仅变量为null时执行实例化
    Log.varos ??= new List<string>();
    Log.tav ??= new List<int>();
    Log.n ??= new List<int>();
    
    using (var sr = new StreamReader("vartav.txt"))
    {
        while (!sr.EndOfStream)
        {
            string s = sr.ReadLine();
            string[] seged = s.Split(' ');
            if (seged.Length >= 2)
            {
                Log.varos.Add(seged[0]);
                Log.tav.Add(Convert.ToInt32(seged[1]));
            }
        }
    }
}
额外优化建议
  • 用using语句包裹StreamReader实例,代码执行完毕后会自动释放文件句柄,避免资源泄漏
  • 增加行格式校验,避免文件中存在不符合格式的行时触发数组索引越界异常
  • 可以额外添加int.TryParse逻辑校验第二列是否为合法数字,避免转换报错

内容的提问来源于stack exchange,提问作者Szuperati12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:57:01