Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我会得到;对象引用未设置为对象的实例;当访问新数组的元素时?_C#_.net_Arrays - Fatal编程技术网

C# 为什么我会得到;对象引用未设置为对象的实例;当访问新数组的元素时?

C# 为什么我会得到;对象引用未设置为对象的实例;当访问新数组的元素时?,c#,.net,arrays,C#,.net,Arrays,我有以下课程 public class alumno { public string nombre, matricula; public int semestre; public string []materias = new string [5]; public double[] calif = new double[5]; } 我需要创建一个数组,但在访问它时遇到了一个错误 static void Main(string[] args) { alu

我有以下课程

public class alumno
{
    public string nombre, matricula;
    public int semestre;

    public string []materias = new string [5];
    public double[] calif = new double[5];
}
我需要创建一个数组,但在访问它时遇到了一个错误

static void Main(string[] args)
{
    alumno[] als = new alumno[5];
    alumno al = new alumno(); // here i dont have problem
    al.nombre = "angel"; // here i dont have problem

    als[0].nombre = "angel"; // but here i DO have problem    
    als[0].semestre = 6;
    als[0].matricula = "123"; 
    als[0].materias[0] = "español";
    als[0].calif[0] = 10;
}
我收到的错误是“Referencea a objeto no establecida como instancia de un objeto”,这在 英语意思是“对象引用未设置为对象的实例”

如何填充阵列上的对象

alumno[] als = new alumno[5]; 
这将创建一个包含5个元素的数组,但也必须创建每个元素

als[0] = new alumno();
// now you can access als[0].nombre
您需要对数组中的每个元素执行此操作,然后才能访问其成员

for (int index = 0; index < als.Length; index++)
{
     als[index] = new alumno();
}
这还突出了另一个约定:在C#中,向公众公开成员字段(类级变量)并不是惯用做法。那些是隐藏的。我们通过C#代码中的属性公开数据(也有例外,这些是您所说的指导原则,而不是实际规则)。

缺少什么

您有alumno类引用,但没有alumno类对象

alumno[0] = new alumno();
alumno[1] = new alumno();
alumno[2] = new alumno();
alumno[3] = new alumno();
alumno[4] = new alumno();

您创建的只是引用变量,而不是alumno对象。

基本上,您正在创建一个空值数组,该数组能够容纳alumno类的5个实例

你想做的可能是

        alumno[] als = new alumno[5];


        //What You Need to Add  
        //VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV

        for (int i = 0; i < als.Length; i++)
        {
            als[i] = new alumno();
        }

        alumno al = new alumno();
        al.nombre = "angel"; 

        als[0].nombre = "angel";  
        als[0].semestre = 6;

        als[0].matricula = "123";

        als[0].materias[0] = "español";
        als[0].calif[0] = 10;
alumno[]als=新校友[5];
//你需要补充什么
//VVVVVVVVVVVVVVV
for(int i=0;i
这将在数组中的每个空间中创建类的新实例

        alumno[] als = new alumno[5];


        //What You Need to Add  
        //VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV

        for (int i = 0; i < als.Length; i++)
        {
            als[i] = new alumno();
        }

        alumno al = new alumno();
        al.nombre = "angel"; 

        als[0].nombre = "angel";  
        als[0].semestre = 6;

        als[0].matricula = "123";

        als[0].materias[0] = "español";
        als[0].calif[0] = 10;