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
new
TeamStat
项,则需要在循环中初始化它们:

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