在 C# 中从类中声明一个数组

Posted

技术标签:

【中文标题】在 C# 中从类中声明一个数组【英文标题】:Declaring an Array from a Class in C# 【发布时间】:2020-03-02 20:25:42 【问题描述】:

我想创建一个由我用类定义的 "Highscore" 对象组成的数组。 当我尝试设置或读取特定数组内容的值时,我总是收到 NullReferenceException。

当我使用单个 Highscore 对象而不是数组时,它确实有效。

当我使用整数数组而不是高分数组时,它也可以工作。

代码

class Highscore

    public int score;

class Program

    static void Main()
    
        Highscore[] highscoresArray = new Highscore[10];
        highscoresArray[0].score = 12;
        Console.WriteLine(highscoresArray[0].score);
        Console.ReadLine();
    

System.NullReferenceException:

highscoresArray[] 为空。

【问题讨论】:

Highscore[] highscoresArray = Enumerable.Range(0, 10).Select(x => new Highscore()).ToArray(); 查看这个***.com/questions/5678216/… 【参考方案1】:

在这段代码中:

Highscore[] highscoresArray = new Highscore[10];

您实例化了一个 Highscore 对象数组,但您没有实例化数组中的每个对象。

你需要这样做

for(int i = 0; i < highscoresArray.Length; i++)
    highscoresArray[i]  = new Highscore();

【讨论】:

【参考方案2】:

你要先给数组加一个高分,例如:

highscoresArray[0] = new Highscore();

【讨论】:

【参考方案3】:

那是因为您创建了一个数组,设置了它的长度,但实际上从未实例化它的任何元素。一种方法是:

Highscore[] highscoresArray = new Highscore[10];
highscoresArray[0] = new Highscore();

【讨论】:

【参考方案4】:

也许你需要初始化数组的每一项:

 for (int i = 0; i < highscoresArray.length; i++)
 
      highscoresArray[i] = new Highscore();
 

【讨论】:

【参考方案5】:

.. 或者使用结构体

struct Highscore

    public int score;

【讨论】:

结构的缺点/优点是什么? @JoshuaDrake 特别是在这种情况下 - 不需要初始化。 评论来自审核队列,我们​​希望答案包括原因,而不仅仅是代码。

以上是关于在 C# 中从类中声明一个数组的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中从类外部访问私有构造函数

Java - 从类中调用私有数组列表[重复]

Javascript - 从数组中查找所有类,从类中获取并返回内部文本

如何在颤动中从类(小部件外部)打开屏幕

使用 node express 从类中渲染方法

mule 在流程中从类路径中读取单个文件