在构造函数中初始化类的数组

时间:2013-04-18 02:56:50

标签: c# visual-studio-2010 constructor

我有一个类Garage,它有一个属性类型为Car的数组,这是程序中的另一个类。我已经尝试了几次迭代并在大多数迭代中获得运行时错误。每当我尝试运行它时,我都会得到NullRefernceException。这发生在Program类中,我尝试访问CarLot数组的length属性。

我知道这与CarLot类的Garage属性是一个数组而不仅仅是Car有关。我在这里丢失了什么片段,以便在程序尝试使用它时数组不设置为空?

class Program
{
    static void Main(string[] args)
    {
        Garage g = new Garage();
        //this is where the exception occurs
        g.CarLot[0] = new Car(5, "car model");
        Console.ReadLine();
    }
}

public class Garage 
{
    public Car[] CarLot { get; set; }
    public Garage() { }
    //this should be able to be 0 or greater
    public Garage(params Car[] c)
    {
        Car[] cars = { };
        CarLot = cars;
    }
}

public class Car
{
    public int VIN { get; set; }
    public int Year { get; set; }
    public string Model { get; set; }
    public Car(int _vin, string _model)
    {
        _vin = VIN;
        _model = Model;
    }
    public Car() { }
    public void Print()
    {
        Console.WriteLine("Here is some information about the car {0} and {1} ");
    }
}

2 个答案:

答案 0 :(得分:2)

在Main中调用无参数构造函数时,可以使用私有变量初始化数组,而不是为数组使用auto属性。

e.g。

private Car[] carLot = new Car[size];
public Car[] CarLot
{
     get { return carLot; }
     set { carLot = value; }
}

或者,在Garage的无参数构造函数中,您可以继续并在此时初始化数组。

无论哪种方式,都必须先实例化数组,然后才能为其赋值。 http://msdn.microsoft.com/en-us/library/aa288453(v=vs.71).aspx

答案 1 :(得分:1)

我知道这不是你要求的确切事情,但这样的事情怎么样?不是更容易吗?

    static void Main(string[] args)
    {
        var garage = new List<Car>();
        //this is where the exception occurs
        garage.Add(new Car(5, "car model"));
    }

    public class Car
    {
        public int VIN { get; set; }
        public int Year { get; set; }
        public string Model { get; set; }
        public Car(int _vin, string _model)
        {
            _vin = VIN;
            _model = Model;
        }
        public Car() { }
        public void Print()
        {
            Console.WriteLine("Here is some information about the car {0} and {1} ");
        }

    }