2013-10-01 5 views
0

У меня есть класс реализован, как это:NullReferenceException на массив свойства объекта

class Person 
{ 
    public int ID { get; set; } 
    public string FName { get; set; } 
    public string LName { get; set; } 
    public double[] Fees { get; set; } 

    public Person() { } 

    public Person(
     int iD, 
     string fName, 
     string lName, 
     double[] fees) 
    { 
     ID = iD; 
     FName = fName; 
     LName = lName; 
     Fees = fees; 
    } 
} 

Тогда я пытаюсь проверить код в простом случае нажатия кнопки, как это:

Person p = new Person(); 
p.ID = 1; 
p.FName = "Bob"; 
p.LName = "Smith"; 
p.Fees[0] = 11; 
p.Fees[1] = 12; 
p.Fees[2] = 13; 

for (int i = 0; i < p.Fees.Length; i++) 
{ 
    lstResult.Items.Add(p.ID + ", " + p.FName + ", " + p.LName + ", " + p.Fees[i]); 
} 

I «На данный момент все на самом деле простое и простое, просто чтобы получить то, что мне нужно.

Visual Studio дает эту ошибку при запуске программы:

NullReferenceException was unhandled

ошибка имеет отношение к собственности Пошлины массива объекта Person. Мне нужно иметь массив как свойство объекта, чтобы я мог связать плату с определенным человеком. Поэтому, если то, что я пытаюсь сделать здесь, невозможно, я хотел бы сохранить то же самое в классе.

  • Я не создаю объект, который правильно?
  • Нужно ли что-то сделать для инициализации свойства массива?
  • Может ли кто-нибудь увидеть вопрос, который у меня есть?

Я желаю развлечь идеи использования словаря или какой-либо другой структуры данных. но ТОЛЬКО, если то, что я пытаюсь сделать здесь, абсолютно НЕ возможно.

Я осмотрел Google и не повезло. Я посмотрел старые заметки и примеры проектов, и не повезло. Это моя последняя надежда. Кто-то, пожалуйста, помогите. Спасибо заранее всем.

+1

Вам необходимо выделить массив: 'p.Fees = новый двойной [3];' –

ответ

4

Вам не хватает инициализации массива, как указывали другие.

p.Fees = new double[3]; 

Но общий список лучше всего подходит для почти всех мест, где вы бы использовали массив. Это все та же структура данных.

Список автоматически сжимается и расширяется при добавлении и удалении элементов, устраняя необходимость управления размером массива самостоятельно.

Рассмотрим этот класс (обратите внимание, что вам нужно импортировать System.Collections.Generic)

using System.Collections.Generic; 

    class Person 
    { 
    public int ID { get; set; } 
    public string FName { get; set; } 
    public string LName { get; set; } 
    public List<double> Fees { get; set; } 

    public Person() 
    { } 

    public Person(
     int iD, 
     string fName, 
     string lName, 
     List<double> fees) 
    { 
     ID = iD; 
     FName = fName; 
     LName = lName; 
     Fees = fees; 
    } 
} 

Теперь вот как ваш тестовый метод должен выглядеть

 Person p = new Person(); 
     p.ID = 1; 
     p.FName = "Bob"; 
     p.LName = "Smith"; 
     p.Fees = new List<double>(); 
     p.Fees.Add(11); 
     p.Fees.Add(12); 
     p.Fees.Add(13); 

     for (int i = 0; i < p.Fees.Count; i++) 
     { 
      lstResult.Items.Add(p.ID + ", " + p.FName + ", " + p.LName + ", " + p.Fees[i]); 
     } 

Вы все еще будет нужно создать новый экземпляр свойства Fees, но вам не нужно беспокоиться об инициализации размера массива. Для бонусных баллов, которые можно легко преобразовать его в массив, если вам нужно с помощью ToArray()

p.Fees.ToArray(); 
+0

спасибо! Отличный ответ! – Zolt

1

В своем конструкторе по умолчанию, который вы вызываете, вы не инициализируете fees.

public Person() { 
    this.Fees = new double[10]; // whatever size you want 
} 
1

Это

Person p = new Person(); 
p.ID = 1; 
p.FName = "Bob"; 
p.LName = "Smith"; 
p.Fees[0] = 11; 
p.Fees[1] = 12; 
p.Fees[2] = 13; 

должно быть переведено

Person p = new Person(1,"Bob","Smith",new double[]{ 11, 12, 13 }); 
1

Добавить следующую строку

p.Fees = new double[3]; 

перед тем

p.Fees[0] = 11; 
1

Вам необходимо внести в оплату комиссионные. например

Person p = new Person(); 
p.ID = 1; 
p.FName = "Bob"; 
p.LName = "Smith"; 
p.Fees = new double[] {11, 12, 13}; 
Смежные вопросы