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

C# UWP天气程序访问嵌套列表时出现空引用异常

解决UWP中WeatherPage访问嵌套列表时的空引用异常

看起来你遇到的是典型的空引用异常,结合你描述的场景——GetWeather里填充了数据但其他类引用时为null,大概率是实例共享、属性定义或者异步加载的问题,我给你一步步拆解排查和解决方法:

1. 先确认myForecast实例是否一致

首先要排查:你在GetWeather方法中填充数据的那个Forecast实例,和WeatherPage里访问的myForecast是不是同一个对象?

  • 如果WeatherPage里是重新new了一个Forecast对象,那它的mysortedDays自然是null,因为你填充的是另一个实例的数据。
  • 解决:确保WeatherPage拿到的是已经执行过GetWeather的那个实例,比如通过构造函数传递、依赖注入,或者用单例模式(如果适合你的场景)。

2. 检查mysortedDays的属性定义是否正确

你猜测需要setter是对的,很可能是属性的访问修饰符或者初始化有问题:

  • 错误示例:如果属性只有getter没有setter,或者setter是private,那外部无法赋值,或者初始化时没创建实例:
    // 错误:没有setter,或者未初始化
    public List<List<WeatherDay>> mysortedDays { get; private set; }
    // 或者根本没初始化
    public List<List<WeatherDay>> mysortedDays { get; set; }
    
  • 正确做法:给属性添加public的setter,并且最好在声明时就初始化空列表,避免后续赋值前为null:
    public List<List<WeatherDay>> mysortedDays { get; set; } = new List<List<WeatherDay>>();
    
    另外,在GetWeather里填充数据时,要确保是给这个属性赋值,而不是创建局部变量覆盖:
    // 正确:给当前实例的mysortedDays赋值
    this.mysortedDays = sortedData; // sortedData是你处理好的嵌套列表
    // 或者如果是填充已有列表:
    this.mysortedDays.Clear();
    this.mysortedDays.AddRange(sortedData);
    

3. 排查异步加载的时序问题(UWP常见)

如果GetWeather是异步方法(比如调用天气API时用了async/await),那很可能你在WeatherPage中访问mysortedDays的时候,GetWeather还没执行完成,导致数据还没填充:

  • 解决:确保在等待GetWeather完成后再访问数据:
    // 在WeatherPage中调用GetWeather时要await
    await myForecast.GetWeather();
    // 等数据加载完成后再打印
    Debug.WriteLine("DEBUG IN WEATHERPAGE: " + myForecast.mysortedDays[1][1].desc);
    
    如果是UI场景,还可以考虑用ObservableCollection替代List,这样数据更新时UI会自动响应,也能避免提前访问空数据的问题。

4. 额外的安全检查

即使前面的问题都解决了,也建议在访问嵌套列表时加空值和索引检查,避免后续出现其他异常:

if (myForecast?.mysortedDays != null 
    && myForecast.mysortedDays.Count > 1 
    && myForecast.mysortedDays[1].Count > 1)
{
    Debug.WriteLine("DEBUG IN WEATHERPAGE: " + myForecast.mysortedDays[1][1].desc);
}
else
{
    Debug.WriteLine("数据未加载完成或索引越界");
}

先按照这几个步骤排查,应该就能解决空引用的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:47:56