2016-08-25 5 views
-2

Мне нужно получить доступ к ссылочным классам внутри основного класса и вставить значения в объекты. Классы имеют частичный тип.Частичный класс многоуровневого наследования

мой код:

public partial class Get_CountryInfo_Resp_object 
     { 
      public string ReturnCode { get; set; } 
      public string ErrorMsg { get; set; } 
      public string Alpha2_Code { get; set; } 
      public string Digit3_Code { get; set; } 
      public string CountryName { get; set; } 
      public string IBAN_Mandatory { get; set; } 
      public As_SenderCountry[] As_SenderCountry { get; set; } 
      public As_ReceiverCountry[] As_ReceiverCountry { get; set; } 
     } 

     public partial class As_SenderCountry 
     { 
      public string SenderCountry_IsSensitive { get; set; } 
     } 

     public partial class As_ReceiverCountry 
     { 
      public string ReceiverCtry_EFTNotAllowed { get; set; } 
      public ReceiverCtry_AllowedCCY_Item[] ReceiverCtry_AllowedCCY_List { get; set; } 
     } 

     public partial class ReceiverCtry_AllowedCCY_Item 
     { 
      public string ReceiverCtry_AllowedCCY { get; set; } 
     } 

     private static void Task2() 
     { 
      String xmlText = File.ReadAllText(@"../../XML/sample1.xml"); 
      DataSet ds = new DataSet(); 
      ds.ReadXml(new XmlTextReader(new StringReader(xmlText))); 

      DataTable dt = ds.Tables["column"]; 

      Get_CountryInfo_Resp_object Get_CountryInfo_Resp = new Get_CountryInfo_Resp_object(); 
      //Get_CountryInfo_Resp.As_SenderCountry; 

      Get_CountryInfo_Resp.ReturnCode = dt.Rows[0]["column_Text"].ToString(); 
      Get_CountryInfo_Resp.ErrorMsg = dt.Rows[1]["column_Text"].ToString(); 
      Get_CountryInfo_Resp.Alpha2_Code = dt.Rows[2]["column_Text"].ToString(); 
      Get_CountryInfo_Resp.Digit3_Code = dt.Rows[3]["column_Text"].ToString(); 
      Get_CountryInfo_Resp.CountryName = dt.Rows[4]["column_Text"].ToString(); 
      Get_CountryInfo_Resp.IBAN_Mandatory = dt.Rows[5]["column_Text"].ToString(); 
      //GetCountryInfo_Resp.As_SenderCountry.SenderCountry_IsSensitive 

мне нужно вставить dt.Rows[6]["column_Text"].ToString(); в GetCountryInfo_Resp.As_SenderCountry.SenderCountry_IsSensitive. Как я могу продолжить? Пожалуйста, помогите.

+2

Хотелось бы отметить, что классы, которые являются «частичными», не имеют отношения к этому вопросу. Частичные классы, как обычные классы, разделяются только на несколько файлов. –

+0

То же самое верно для наследования @ThorstenDittmar –

+0

@PatrickHofman True :-) –

ответ

2

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

Я бы начал создавать объект, добавить его в список и в конечном итоге создать массив из него (или изменить тип, чтобы быть списком вместо массива). Вы также можете исправить размер массива, если уже знаете длину.

As_SenderCountry asc = new As_SenderCountry(); 
asc.SenderCountry_IsSensitive = dt.Rows[6]["column_Text"].ToString(); 

И потом:

GetCountryInfo_Resp.As_SenderCountry = new As_SenderCountry[] { asc }; 

Или создать список, цикл по пунктам и в конечном счете присвоить его:

List<As_SenderCountry> list = new List<As_SenderCountry>(); 

// some sort of loop 
As_SenderCountry asc = new As_SenderCountry(); 
... 

list.Add(asc); 
// end loop 

GetCountryInfo_Resp.As_SenderCountry = list.ToArray(); 
+0

Мне нужно добавить элементы из существующего массива в массив ReceiverCtry_AllowedCCY_List. Как мне продолжить? – velvt

0

Вам нужно создать новый экземпляр внутреннего класса, как вы будет нормально работать для любого другого класса, а затем назначить любое значение в нужное поле. Сначала вам нужно назначить длину массива, тогда каждая ячейка массива будет содержать экземпляр объекта типа (As_SenderCountry), тогда вы должны назначить каждому объекту требуемое значение.

GetCountryInfo_Resp.As_SenderCountry = new GetCountryInfo_Resp.As_SenderCountry(); 

GetCountryInfo_Resp.As_SenderCountry[INDEX_HERE].SenderCountry_IsSensitive = dt.Rows[6]["column_Text"].ToString(); 
+1

Это не работает. Это массив. –

0

Я не думаю, что я полностью понимаю ваш код, но As_SenderCountry и As_ReceiverCountry в вашем public partial class Get_CountryInfo_Resp_object массивы, если я не читаю это неправильно.

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

GetCountryInfo_Resp.As_SenderCountry[0].SenderCountry_IsSensitive = dt.Rows[6]["column_Text"].ToString(); 

В качестве альтернативы, вы можете использовать списки - преимущество с списками того, что вам не нужно знать размер массива при создании экземпляра. Пример с вашими переменными:

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

+0

Это приведет к 'NullReferenceException'. –

+0

Да, поскольку массив еще не инициализирован, попробуйте добавить 'As_SenderCountry = new As_SenderCountry [10]' перед строкой, заменив 10 на любую сумму, в которой вы будете нуждаться. –

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