我有一个像这样的静态类:
public static class ApplicationList
{
public static List<ApplicationsModel> ApplicationsModels { get; set; }
}
我想在另一个类
中使用ApplicationsModels class Program
{
static void Main(string[] args)
{
GetApplicationNameFromAppConfigAndAddToApplicationList();
}
private static void GetApplicationNameFromAppConfigAndAddToApplicationList()
{
List<string> applicationName = ConfigurationManager.AppSettings["AppName"].Split(',').ToList();
foreach (var variable in applicationName)
{
ApplicationList.ApplicationsModels.Add(new ApplicationsModel { DateTime = DateTime.MinValue, Name = variable });
}
}
}
但是我的ApplicationList为null并且出现此错误
Object reference not set to an instance of an object.
这是静态Prpoerty,我们无法创建实例形式静态Prpoerty
答案 0 :(得分:4)
你有一个
public static List<ApplicationsModel> ApplicationsModels { get; set; }
未初始化的属性。
可以做这样的事情,而不是:
public static class ApplicationList
{
private static List<ApplicationsModel> appmodel = new List<ApplicationsModel>();
public static List<ApplicationsModel> ApplicationsModels
{
get { return appmodel ;}
}
//DON'T THINK YOU NEED A SET IN THIS CASE..
// BUT ADD IT, IF NEED
}
答案 1 :(得分:2)
您获得空引用异常,因为当您尝试使用List<ApplicationsModel> ApplicationsModels
时,ApplicationsModels = new List<ApplicationsModel>();
仍为null。只是声明它是静态的并不意味着编译器或框架为你添加了对
{{1}}
答案 2 :(得分:1)
简短回答,在加载列表前添加此行:
ApplicationsModels = new List<ApplicationsModel>();
更长的回答:
您需要初始化List
,然后才能添加。{/ p>
这是因为默认情况下(引用类型)属性为null
,执行null.Add(item)
没有意义。
解决方案1:加载前初始化:
简单的解决方案是在使用Get...
方法加载列表之前添加初始化行:
ApplicationsModels = new List<ApplicationsModel>();
但是,每次调用Get
方法时,这都会重新初始化列表(可能是您想要的,也可能不是)。您可以选中仅在null
的情况下重新创建列表,但如果这是您之后我倾向于采用以下其他解决方案之一的行为。
解决方案2:使用初始化字段而不是属性:
另一种方法是用初始化字段替换您的属性。之一:
public static List<ApplicationsModel> ApplicationsModels = new List<ApplicationsModel>();
或者:
public static List<ApplicationsModel> ApplicationsModels
{
get { return _applicationsModels; }
set { _applicationModels = value; } // Do you really want a set?
}
private static List<ApplicationsModel> _applicationsModels = new List<ApplicationsModel>();
解决方案3:保留属性,但使用静态构造函数:
另一种方法是在ApplicationList
中使用static constructor:
static ApplicationList()
{
ApplicationsModels = new List<ApplicationsModel>();
}