2013-04-18 2 views
1

У меня есть класс Garage, который имеет свойство, которое представляет собой массив типа Car, который является другим классом в программе. Я пробовал несколько итераций и получал ошибки во время выполнения на большинстве из них. Я получаю NullRefernceException всякий раз, когда я пытаюсь запустить его. Это происходит в классе Program, где я пытаюсь получить доступ к свойству length массива 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} "); 
    } 
} 
+0

Какое точное исключение? –

+0

'NullReferenceException' в строке' g.CarLot..' в классе программы – wootscootinboogie

ответ

2

Вместо того, чтобы использовать авто свойства для массива, вы можете использовать приватную переменную для инициализации массива, когда ваш конструктор без параметров вызывается в Main.

например.

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

Кроме того, в вашем конструкторе без параметров гаража вы можете пойти дальше и инициализировать массив в этой точке.

В любом случае, ваш массив должен быть создан, прежде чем вы сможете присвоить ему значения. http://msdn.microsoft.com/en-us/library/aa288453(v=vs.71).aspx

+0

Это была моя проблема, я думаю. Я пытался найти способ не помещать что-либо внутри []. – wootscootinboogie

+0

Прохладный, рад помочь :). –

+0

Emmm исправьте меня, если я ошибаюсь, но вам не нужно указывать размер массива 'new Car [SIZE]'? Не уверен, что это скомпилирует –

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

    } 
Смежные вопросы