2016-12-05 7 views
-2

У меня этот код предоставлен API, который я использую.Как получить доступ к массиву, определенному в классе в другом классе без конструктора?

public partial class getMerchant : object, System.ComponentModel.INotifyPropertyChanged 
    { 
     private int[] iMerchantIdField; 

     /// <remarks/> 
     [System.Xml.Serialization.XmlElementAttribute("iMerchantId", Form = System.Xml.Schema.XmlSchemaForm.Unqualified, Order = 0)] 
     public int[] iMerchantId 
     { 
      get 
      { 
       return this.iMerchantIdField; 
      } 
      set 
      { 
       this.iMerchantIdField = value; 
       this.RaisePropertyChanged("iMerchantId"); 
      } 
     } 
    } 

Теперь я пытаюсь создать объект этого класса и запустить его:

private void btnShowResult_Click(object sender, EventArgs e) 
    { 

     Awin.ApiPortTypeClient client = new Awin.ApiPortTypeClient(); 

     UserAuthentication userAuthentication = new UserAuthentication(); 
     userAuthentication.sApiKey = "111"; 

     getMerchant merchant = new getMerchant(); 

     merchant.iMerchantId[0] = 2518; 
     merchant.iMerchantId[1] = 3030; 


     var response = client.getMerchant(userAuthentication, merchant); 

     lblResult.Text = response[0].sName.ToString(); 

    } 

Но всякий раз, когда я пытаюсь запустить его он дает NullReferenceException, когда компилятор попал в линию merchant.iMerchantId [0] = 2518; До сих пор я понял, что этот iMerchantId [] еще не объявлен. Но проблема в том, что я не могу найти ответ, как объявить его.

Я благодарен за любую помощь, которую я могу получить.

ответ

2

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

private int[] iMerchantIdField= new int[2]; 

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

Дополнительные примечания: Если вы используете список вместо массива, вам необходимо создать экземпляр списка через свойство резервного копирования, иначе будет выведено NullException. В таком случае декларация будет выглядеть так:

private List<int> iMerchantIdField= new List<int>(); 
+0

Я бы также пересмотрел, действительно ли это должен быть массив или «Список». –

+0

Я изменил свойство на это: private int [] iMerchantIdField = new int [2]; Ошибка nullreferenceexception больше не появляется, но теперь я получил этот код ошибки: '** System.ServiceModel.FaultException **' Как мне с этим справиться? – Chaoguo0