2015-10-20 2 views
-3

Я создал простой код, как показано ниже. Во время отладки я получаю сообщение об ошибке «Исключение обработки NullReference Exception» в кодовой строке:C# -NullReference Exception Error

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

Is is throwing null exception at 1st loop? –

+0

Я перешел по ссылке, как упоминалось выше. Кажется, я пропустил там ответ. – Cartman23

ответ

1

Вы получаете Null Exception Поскольку вам нужно инициализировать List<RankPlotDataPoint> DataPoints. Таким образом, вместо Initialize DataPoints каждый раз, когда вы создаете экземпляр RankPlot, вы должны инициализировать, как показано ниже:

Измените ваше Ниже заявление:

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 вам нужно объявить новый список RankPlotData в вашем классе RankPlot и инициализировать его с помощью .. new List<RankPlotData>(). Затем вы должны вернуть , что от вашей собственности get accessor.

1

evaluate() в метод вместо

RankPlot X = new RankPlot(); 

записи

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

Он будет инициализировать список.

Смежные вопросы