【发布时间】:2018-03-19 12:03:44
【问题描述】:
我有如下一段代码:
// 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);
}
}
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);
}
}
好的,没有错误。
为什么?
【问题讨论】:
-
您是否检查了 ApplicationData 是否为 null 或 ApplicationData.Current 是否为 null ?
-
这不是一个真正的空参考问题。在第一个代码块中你有一个属性初始化器,在第二个你有一个函数定义。
-
第一个版本设置了一个只读属性(带有支持字段)并在静态构建时分配给支持字段。第二个设置了一个属性(只有一个 getter)没有支持字段。第二个将起作用,因为当您调用它时,
container将不再是null。