0

好的,所以我正在尝试创建一个高分系统并在对象中使用一个类的数组,但是出现标题中的错误,告诉我由于某种原因我的对象充满了空变量,这是我的类:

class HighScores
{
    public HighScore[] MyScores = new HighScore[5];

    protected bool failedRead = false;

    private void SortHighScores(string NewName, int NewScore)
    {
        HighScore[] TmpScores = new HighScore[6];

        for (int i = 0; i < 5; i++)
        {
            TmpScores[i].Name = MyScores[i].Name; // Error Occurs here for `MyScores[i].Name` however in output box both MyScores and TmpScores show null
            TmpScores[i].Score = MyScores[i].Score;
        }
        TmpScores[5].Name = NewName;
        TmpScores[5].Score = NewScore;

        Array.Sort(TmpScores, delegate(HighScore x, HighScore y) { return x.Score.CompareTo(y.Score); });
        Array.Reverse(TmpScores);

        MyScores = new HighScore[5];
        for (int i = 0; i < 5; i++)
        {
            MyScores[i].Name = TmpScores[i].Name;
            MyScores[i].Score = TmpScores[i].Score;
        }
    }
}

class HighScore
{
    public string Name = "hello world";
    public int Score = 0;
}

这里是我初始化一个对象的地方HighScores

HighScores GameScores;
protected override void Initialize()
{
    base.Initialize();
    GameScores = new Highscores();
}

如果我将对象设置为new?

[编辑]

好的,所以我在 HighScores 类中创建了一个新函数来将 MyScores 对象初始化为新的 HighScore 对象:

public void InitScores()
{
    for (int i = 0; i < 5; i++)
    {
        MyScores[i] = new HighScore();
    }
}

在内部调用protected override void Initialize()(相信大家都熟悉它,它是 XNA 中的标准)。我还在类函数中添加了相同的代码:GameScores.SortHighScores初始化TmpScores

还是一样的错误,还是一样的地方,有什么想法吗?

4

2 回答 2

2

看起来您需要HighScore为您的MyScores数组创建实例。您只需在上面的代码中创建数组。

所以在代码的某个地方你需要类似于

MyScores[i] = new HighScore();
于 2013-02-11T22:54:30.353 回答
1

的初始化GameScores是不够的。您不初始化内部数组的值MyScores(至少不在显示的代码中)。当然,当您尝试使用该数组的任何元素时,您会得到一个NullReferenceException

您需要在 HighScores 的构造函数中添加类似于此的代码

public HighScores()
{
    MyScores = new HighScore[5];
    for(x = 0; x < 5; x++)
        MyScores[i] = new HighScore();

}

编辑:

此代码具有相同的概念错误

HighScore[] TmpScores = new HighScore[6];

for (int i = 0; i < 5; i++)
{
    TmpScores[i].Name = MyScores[i].Name;             
    TmpScores[i].Score = MyScores[i].Score;
}

在这里,您声明了一个名为 TmpScores 的数组,该数组具有存储 6 个 HighScore 类型的元素的空间,但是这 6 个元素是全部null,因此您不能将变量 N​​ame 或 Score 分配给为 null 的元素 (i)。

也许这段代码对你有用:

    for (int i = 0; i < 5; i++)
    {
        // Assign to tmpScores an already initialized object HighScore
        TmpScores[i] = MyScores[i];
    }

    TmpScores[5] = new HighScore {Name = NewName, Score = NewScore};
于 2013-02-11T22:55:53.923 回答