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

静态构造函数未被调用?代码触发NullReferenceException求助

解决静态构造函数未被调用导致的NullReferenceException问题

嘿,我一眼就揪出问题所在啦!你遇到的NullReferenceException根本不是静态构造函数没被调用,而是静态成员的初始化顺序搞反了。

问题根源

在C#里,类型的静态字段/属性初始化器是在静态构造函数执行之前运行的。你的FirstTime是只读自动实现属性,它的初始化表达式!GetContainer("UserInfo").Values.ContainsKey("complete")会在静态构造函数给container赋值之前就执行——这时候container还是null,调用GetContainer自然就触发空引用异常了。

解决方案

有两种简单的修复方式,按需选就行:

方案1:延迟加载FirstTime属性

把FirstTime改成带后台字段的属性,第一次访问时再计算值,确保container已经初始化:

using Windows.Storage;

internal static class AppData
{
    private static ApplicationDataContainer container;
    private static bool? _firstTime; // 用可空类型避免重复计算

    public static bool FirstTime
    {
        get
        {
            if (_firstTime == null)
            {
                _firstTime = !GetContainer("UserInfo").Values.ContainsKey("complete");
            }
            return _firstTime.Value;
        }
    }

    static AppData()
    {
        container = ApplicationData.Current.LocalSettings;
    }

    private static ApplicationDataContainer GetContainer(string name)
    {
        return container.CreateContainer(name, ApplicationDataCreateDisposition.Always);
    }
}

方案2:把FirstTime的初始化移到静态构造函数

如果不需要延迟加载,直接把FirstTime的初始化逻辑放进静态构造函数里,保证依赖的container已经被赋值:

using Windows.Storage;

internal static class AppData
{
    private static ApplicationDataContainer container;
    public static bool FirstTime { get; private set; } // 改为私有setter

    static AppData()
    {
        container = ApplicationData.Current.LocalSettings;
        FirstTime = !GetContainer("UserInfo").Values.ContainsKey("complete");
    }

    private static ApplicationDataContainer GetContainer(string name)
    {
        return container.CreateContainer(name, ApplicationDataCreateDisposition.Always);
    }
}

小提醒

记住C#的静态初始化顺序:静态字段初始化器 → 静态构造函数。当静态成员依赖于静态构造函数里初始化的对象时,千万别在初始化器里直接调用依赖这些对象的方法,不然很容易踩空引用的坑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:13:20