2015-10-20 54 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>()}; 

它會初始化列表。