重复 - C#-NullReference异常错误

时间:2015-10-20 03:58:10

标签: c#

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

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);
        }

4 个答案:

答案 0 :(得分:1)

您将获得Null Exception因为您需要初始化List<RankPlotDataPoint> DataPoints。因此,每次创建DataPoints的实例时,不应初始化RankPlot,而应初始化如下:

更改以下声明:

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

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

答案 1 :(得分:1)

evaluate()方法中而不是

RankPlot X = new RankPlot();

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

它会初始化列表。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

返回