静态构造函数似乎没有被调用?

snd*_*dai 2 .net c# uwp

我有以下代码:

// using Windows.Storage;
internal static class AppData {
    private static ApplicationDataContainer container;
    public static bool FirstTime { get; } = !GetContainer("UserInfo").Values.ContainsKey("complete");
    static AppData() {
        container = ApplicationData.Current.LocalSettings;
    }
    private static ApplicationDataContainer GetContainer(string name) {
        return container.CreateContainer(name,ApplicationDataCreateDisposition.Always);
    }
}
Run Code Online (Sandbox Code Playgroud)

NullReferenceException:未将对象引用设置为对象的实例.

我不知道为什么这是错的.对代码进行一些更改

// using Windows.Storage;
internal static class AppData {
    private static ApplicationDataContainer container;
    public static bool FirstTime => !GetContainer("UserInfo").Values.ContainsKey("complete");
    static AppData() {
        container = ApplicationData.Current.LocalSettings;
    }
    private static ApplicationDataContainer GetContainer(string name) {
        return container.CreateContainer(name,ApplicationDataCreateDisposition.Always);
    }
}
Run Code Online (Sandbox Code Playgroud)

好的,没有错误.

为什么?

Hen*_*man 6

我将不得不查阅参考,但问题是

public static bool FirstTime { get; } = ....;
Run Code Online (Sandbox Code Playgroud)

是一个初始化器.作为初始化程序,它在构造函数之前执行.

当您将其更改为函数(或只读lambda属性)时,它是一个普通成员,它将在构造函数之后执行.

  • 但你对这个属性是正确的,它是`bool FirstIme => ...`并且方法看起来像`bool FirstIme()=> ......`.语义是一样的. (2认同)