初始化阵列后无法将对象添加到数组中

时间:2017-12-07 01:03:16

标签: c# arrays

我正在尝试使用预定值初始化一个对象数组,但我得到“对象引用未设置为对象的实例”。
我不明白问题的原因,因为我正确地初始化然后我正在为数组添加值 主要是:

Sorteo P=new Sorteo();
P.Predetermined();

Class Sorteo:

// Atribute
private ClassA[] A;
int count=0;

// Methods
public Sorteo()
{
    A=new ClassA[2];
}
public void Add(ClassA a)
{
    A[count]=a;
    count++;
}
public void PredeterminedValues()
{
    A[0].Add(new ClassB("SomeString1"));
    A[1].Add(new ClassB("SomeString2"));
}

2 个答案:

答案 0 :(得分:2)

您正在处理一组引用类型,而不是值类型。

在以下行中:

    A = new ClassA[2]; 
    //[0] -> null
    //[1] -> null

您确实初始化了一个数组,该数组包含 ClassA 类型的引用对象。

在这种情况下,它实际上包含两个ClassA类型的变量,但是每个变量都将被设置为null(因为你没有初始化它们),因此当你尝试引用它们时,异常 < em>将抛出未设置为对象实例的对象引用

解?

初始化数组后添加此内容

A[0] = new ClassA(); // not null anymore
A[1] = new ClassA(); // not null anymore

答案 1 :(得分:0)

我很难理解你的问题,但这是你想要做的吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace YourNameSpace
{
    public class Program
    {
        public static void Main(string[] args)
        {
            ClassA Item = new ClassA();
            Item.PredeterminedValues();

            foreach(string s in Item.StringArray)
            {
                Console.WriteLine(s);
            }
        }
    }

    public class ClassA
    {
        public int Counter {get;private set;}
        public string[] StringArray{get;private set;}

        public ClassA()
        {
            StringArray = new string[2];
        }

        public void Add(int Value)
        {
            Counter += Value;   
        }

        public void PredeterminedValues()
        {
            StringArray[0] = ("SomeString1");
            StringArray[1] = ("SomeString2");
        }
    }
}