【问题标题】:How can I correct a NullReferenceException in the following code?如何更正以下代码中的 NullReferenceException?
【发布时间】:2013-09-05 11:48:29
【问题描述】:

我是编程新手,这可能是一个简单的问题,但我似乎无法弄清楚。我的程序中有以下 2 个类:

public class TrackingObject
{
public int OrderId { get; set; }
public int ProjectCount { get; set; }
public IList<ProjectInfo> Projects { get; set; }
}

public class ProjectInfo
{
public int ProjectId { get; set; }
public string ProjectType { get; set; }
public int ImageCount { get; set; }
}

为了测试,我创建了一个控制台应用程序并使用了以下代码:

static void Main(string[] args)
{
    TrackingObject oTracking = new TrackingObject();
    ProjectInfo pInfo = new ProjectInfo();

    oTracking.OrderId = 1;
    oTracking.ProjectCount = 1;
    pInfo.ProjectId = 1;
    pInfo.ProjectType = "CANVAS";
    pInfo.ImageCount = 1;
    oTracking.Projects.Add(pInfo);

    Console.WriteLine(oTracking.Projects.Count);
    Console.ReadLine();     
}

当我运行应用程序时,它抛出 NullReferenceException 在以下行未处理:

    oTracking.Projects.Add(pInfo);

我足够了解该异常是因为 oTracking.Projects 为 NULL。完成我正在尝试的正确方法是什么?任何指导将不胜感激。

【问题讨论】:

    标签: c# .net list .net-4.5 nullreferenceexception


    【解决方案1】:

    在添加项目之前添加oTracking.Projects = new List&lt;ProjectInfo&gt;()

    【讨论】:

    • 在 TrackingObject 的构造函数中执行此操作
    • 谢谢大家。我不敢相信我错过了这么基本的东西。如果我的代表足够高,我会投票给你。
    【解决方案2】:

    结合 I4V 的答案和对该答案的第一条评论:

    public class TrackingObject
    {
        public int OrderId { get; set; }
        public int ProjectCount { get; set; }
        public IList<ProjectInfo> Projects { get; set; }
    
        public TrackingObject() {
            this.Projects = new List<ProjectInfo>();
        }
    
        //This constructor optional, but since you're using an IList, may as well
        //let the user pass in an IList of a different type if they chose
        public TrackingObject(IList<ProjectInfo> defaultList) {
            this.Projects = defaultList;
        }
    }
    

    【讨论】:

      【解决方案3】:

      检查对象是否为null,是否为新实例赋值:

      if (oTracking.Projects == null) {
        oTracking.Projects = new List<ProjectInfo>();
      }
      

      【讨论】:

        【解决方案4】:

        Projects需要初始化:

         oTracking.Projects = new List<ProjectInfo>();
        

        【讨论】:

          【解决方案5】:
          static void Main(string[] args)
          {
          TrackingObject oTracking = new TrackingObject();
          ProjectInfo pInfo = new ProjectInfo();
          
          oTracking.OrderId = 1;
          oTracking.ProjectCount = 1;
          pInfo.ProjectId = 1;
          pInfo.ProjectType = "CANVAS";
          pInfo.ImageCount = 1;
          oTracking.Projects = new List<ProjectInfo>();
          oTracking.Projects.Add(pInfo);
          
          Console.WriteLine(oTracking.Projects.Count);
          Console.ReadLine();     
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-05-25
            • 1970-01-01
            • 2021-03-20
            • 1970-01-01
            • 2010-10-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多