2015-03-27 3 views
0

Почему этот объект приложения НЕ создается? Он имеет значение null, когда я запускаю код.Почему мой объект C# не создает экземпляр?

public class Applicant 
{ 
    private Application oApplication = new Application(); 

    public Applicant() 
    { 
     oApplication = new Application(); 
    } 

    public Application Application 
    { 
     get { return oApplication; } 
     set { oApplication = value; } 
    }    
} 

Вот класс Application

public class Application 
{ 
    public string ApplicationID { get; set; } 
    public ContactDetails ContactDetails { get; set; } 
} 

А вот код вызова ....

 public Applicant[] GetApplicants() 
    { 
     Applicant[] oApplicant; 

     DataSet dsExcelSchema = new DataSet(); 
     dsExcelSchema = GetDataAsDataSet(); 

     DataTable contactInfoTable = dsExcelSchema.Tables["ContactInformation$"]; 
     int numOfApplications = contactInfoTable.Rows.Count - 1; 
     int i = 0; 

     oApplicant = new Applicant[numOfApplications]; 

     foreach (DataRow dr in contactInfoTable.Rows) 
     { 
      Application oApplication = new Application(); 

      oApplicant[i].Application.ApplicationID = dr["ApplicationID"].ToString(); 
      i++; 
     } 
     return oApplicant; 
    } 

Это дает мне в NullReferenceException.

+0

Нужно использовать код, который вы используете для выполнения указанного вызова, чтобы точно сказать – David

+0

Как выглядит код, который запускает этот код? – EricSchaefer

+0

Как вы это сделали? – Dusan

ответ

5

Вы забыли создать экземпляр заявителя в элемент массива - должно быть сделано так:

foreach (DataRow dr in contactInfoTable.Rows) 
{ 
    oApplicant[i] = new Applicant(); 
    oApplicant[i].Application.ApplicationID = dr["ApplicationID"].ToString(); 
    i++; 
} 
+0

Спасибо. Переключение с VB на C# и привело к неправильному следу на этом. – TheBigOne

3

Когда вы создаете массив объектов:

oApplicant = new Applicant[numOfApplications]; 

Она будет заполнена с nulls. Таким образом, вы должны инициализировать его с реальными значениями в первой:

for (int i = 0; i < numOfApplications; i++) 
{ 
    oApplicant[i] = new Applicant(); 
} 
+1

'null' есть * реальный * стоимость –

+2

@BinkanSalaryman' null' означает нет значение. Это можно рассматривать как не реальную ценность. Хотя «экземпляры класса» были бы точнее, чем «реальные ценности» здесь. – juharr

+0

'null' является константой указателя в запрещенной области. В большинстве реализаций, если не все, значение адреса 'null' фактически равно нулю, и это значение * real *. Несмотря на это, переменная ссылочного типа со значением, установленным на «null», обычно интерпретируется так, как если бы переменная «не имела связанного значения». –

1

Как также другие ответы , вам также необходимо установить numOfApplications в contactInfoTable.Rows.Count, а не contactInfoTable.Rows.Count - 1;

int numOfApplications = contactInfoTable.Rows.Count;

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