C# 在对象数组中初始化对象的正确方法,这样我就不会';无法获取空指针引用?
我收到一个空指针异常,我把它缩小到这一小块代码。我想这是因为当我设置C# 在对象数组中初始化对象的正确方法,这样我就不会';无法获取空指针引用?,c#,arrays,linq,C#,Arrays,Linq,我收到一个空指针异常,我把它缩小到这一小块代码。我想这是因为当我设置teamStats[iterator].media=Statistics.media时,它不能,因为它还没有初始化。虽然我不知道初始化对象数组的正确方法,也不知道这段代码将导致的内存分支 下面是除了描述TeamStat的类之外,我正在处理的大部分代码,但是我使用了下面的所有成员,它们是public double TeamStat[] teamStats = new TeamStat[DistCount+1];
teamStats[iterator].media=Statistics.media
时,它不能,因为它还没有初始化。虽然我不知道初始化对象数组的正确方法,也不知道这段代码将导致的内存分支
下面是除了描述TeamStat
的类之外,我正在处理的大部分代码,但是我使用了下面的所有成员,它们是public double
TeamStat[] teamStats = new TeamStat[DistCount+1];
int iterator = 0;
foreach (int i in TeamIDlist)
{
var p = userList.Where(x => x.TeamId.Equals(i)).Select(y => (double)y.BS).ToArray();
var statistics = new DescriptiveStatistics(p);
teamStats[iterator].median = Statistics.Median(p);
teamStats[iterator].largestElement = statistics.Maximum;
teamStats[iterator].smallestElement = statistics.Minimum;
teamStats[iterator].mean = statistics.Mean;
teamStats[iterator].variance = statistics.Variance;
teamStats[iterator].stdDev = statistics.StandardDeviation;
iterator++;
}
更新
这样做是否正确:
TeamStat[] teamStats = new TeamStat[DistCount];
int iterator = 0;
foreach (int i in TeamIDlist)
{
//Added these two lines
TeamStat temp = new TeamStat();
teamStats[iterator] = temp;
var p = userList.Where(x => x.TeamId.Equals(i)).Select(y => (double)y.BS).ToArray();
var statistics = new DescriptiveStatistics(p);
teamStats[iterator].median = Statistics.Median(p);
teamStats[iterator].largestElement = statistics.Maximum;
teamStats[iterator].smallestElement = statistics.Minimum;
teamStats[iterator].mean = statistics.Mean;
teamStats[iterator].variance = statistics.Variance;
teamStats[iterator].stdDev = statistics.StandardDeviation;
iterator++;
}
这里
初始化数组。此时,数组包含DistCount+1
null
项
如果希望数组包含DistCount+1
newTeamStat
项,则需要在循环中初始化它们:
TeamStat[] teamStats = new TeamStat[DistCount+1];
for (var i = 0; i < DistCount + 1; i++)
teamStats[i] = new TeamStat();
TeamStat[]teamStats=newteamstat[DistCount+1];
对于(变量i=0;i
您的代码有两个问题
1) 数组中的每个对象在访问其属性之前都需要初始化
teamStats[iterator]=新的TeamStat();
2) 您需要确保初始化的数组具有与您尝试分配值相同/更多的容量。(TeamIDlist
teamStats[iterator]=new TeamStat();
),但是,是的,这是正确的方法。
TeamStat[] teamStats = new TeamStat[DistCount+1];
for (var i = 0; i < DistCount + 1; i++)
teamStats[i] = new TeamStat();