2015-10-20 59 views
-3

我已经构建了一个简单的代码,如下所示。在调试时,我在代码行收到关于“NullReference Handled Exception”的错误:C#-NullReference异常错误

X.DataPoints.Add(dp);

这是代码片段。请问我错过了什么?

public class RankPlot 
     { 
      public List<RankPlotDataPoint> DataPoints { get; set; } 
     } 

     public class RankPlotDataPoint 
     { 
      public double RankVal { get; set; } 
      public double ProbVal { get; set; } 
     } 

     ObservableCollection<RankPlot> EURresults = new ObservableCollection<RankPlot>(); 
     public ObservableCollection<RankPlot> EURResults 
     { 
      get { return EURresults; } 
      set 
      { 
       EURresults = value; 
       base.OnPropertyChanged("StringList"); 
      } 
     } 
     public void evaluate() 
     { 
      RankPlot X = new RankPlot(); 

      for (double i = 0; i<5; i++) 
      { 
       RankPlotDataPoint dp = new RankPlotDataPoint(); 
       dp.RankVal =i+1; // Y axis 
       dp.ProbVal = i; // X axis 

       X.DataPoints.Add(dp); 

      } 
      EURResults.Add(X); 
     } 
+0

是在第一个循环抛出null异常? –

+0

我确实通过上面提到的链接。看来我错过了那里的答案。 – Cartman23

回答

1

由于您需要初始化List<RankPlotDataPoint> DataPoints,因此您将得到Null异常。所以不是每次创建的RankPlot实例时初始化DataPoints的,你应该初始化象下面这样:

更改您的以下声明:

public class RankPlot 
{ 
    public List<RankPlotDataPoint> DataPoints { get; set; } 
} 

public class RankPlot 
{ 
    public List<RankPlotDataPoint> DataPoints { get; set; } = new List<RankPlotDataPoint>(); 
} 
0

X.DataPoints = new List<RankPlotDataPoint>();在将项目添加到列表之前,您从不初始化列表。

+0

@JK我的回答回答了他的问题。如果你不这样认为,你必须认真做个水头。 – Xela

0

您正在尝试添加价值到一个不存在的List<RankPlotData>。使用RankPlot类中的属性,您需要在RankPlot类中声明一个新的RankPlotData列表,并使用.. new List<RankPlotData>()对其进行初始化。然后,您应该返回从您的财产get访问者。

1

evaluate()方法,而不是

RankPlot X = new RankPlot(); 

RankPlot X = new RankPlot{DataPoints = new List<RankPlotDataPoint>()}; 

它会初始化列表。

相关问题