2

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

我知道这与类的CarLot属性有关,Garage它是一个数组,而不仅仅是Car. 我在这里缺少什么,以便在程序尝试使用数组时不会将数组设置为 null?

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} ");
    }
}
4

2 回答 2

2

当在 Main 中调用无参数构造函数时,您可以使用私有变量来初始化数组,而不是使用数组的自动属性。

例如

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

于 2013-04-18T03:01:59.630 回答
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} ");
        }

    }
于 2013-04-18T03:16:42.000 回答