我有一个类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} ");
}
}
答案 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} ");
}
}