我已经构建了一个简单的代码,如下所示。在调试时,我在代码行收到有关“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);
}
答案 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
访问者