0

我有一个像这样的静态类:

  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 为空并收到此错误

Object reference not set to an instance of an object.

这是静态 Prpoerty,我们无法从静态 Prpoerty 创建实例

在此处输入图像描述

4

3 回答 3

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
}
于 2013-04-09T07:23:42.333 回答
2

您得到空引用异常,因为List<ApplicationsModel> ApplicationsModels当您尝试使用它时仍然为空。仅将其声明为静态并不意味着编译器或框架会为您添加对

ApplicationsModels = new List<ApplicationsModel>();
于 2013-04-09T07:24:18.243 回答
1

简短的回答,在加载列表之前添加这一行:

ApplicationsModels = new List<ApplicationsModel>();

更长的答案:

您需要先初始化您的List,然后才能添加到它。

这是因为 (reference-type) 属性将是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 ApplicationList()
{
    ApplicationsModels = new List<ApplicationsModel>();
}
于 2013-04-09T07:24:04.193 回答