2013-05-19 4 views
0

Работает на Vs2010 EF, C#.Почему список показывает странное поведение?

Есть два списка (oLisTranItem, oListTaxItem), необходимо скопировать значения свойств одного списка в другой список, тогда мне нужно работать над новым списком. Проблема заключается в том, что после списка элементов содержимого содержимого экземпляра в другой список влияет какое-либо изменение оба списка, почему это происходит, я просто изменяюсь в списке, но изменения происходят в обоих списках Пожалуйста, проверьте мой сингл.

  List<TransactionItem> oLisTranItem = new List<TransactionItem>(); 
      List<TransactionItem> oListTaxItem = new List<TransactionItem>(); 

      oLisTranItem = _TransactionItem; 
      oListTaxItem = _TransactionItemTax; 

      TransactionItem tmpItem = new TransactionItem(); 

      tmpItem = oLisTranItem.Where(item => item.QuotationDetailID == quotationDetailID && item.Action != Entity.ActionMode.Delete && item.IsDeleted == false).FirstOrDefault(); 

      if (tmpItem.IsNotNull()) 
      { 

       tmpItem.Action = Entity.ActionMode.Add; 
       oListTaxItem.Add(tmpItem); 

      } 
      else 
      { 
       _TransactionItemTax = new List<TransactionItem>(); 
      } 

      int nCounter = 5; 

      foreach (TransactionItem item in oListTaxItem) 
      { 


       if (item.QuotationTaxID ==0) 
       { 
        nCounter = nCounter + 1; 

        item.QuotationTaxID = nCounter; 


       } 
    } 

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

Если у вас есть какие-либо вопросы, пожалуйста, свяжитесь с нами.

ответ

1

TransactionItem, вероятно, класс, не так ли? И не структура.

Каждый тип, который является классом, является по умолчанию ссылочным типом. Это означает, что вы имеете в списках не реальные значения элементов транзакции, а ссылки (считайте указатели C++) на эти значения. Поэтому, когда вы копируете данные из одного списка в другой, вы просто копируете ссылки.

Вам необходимо указать clone предметы из одного списка в другой. Дайте вашему классу метод клонирования экземпляров и используйте этот метод для копирования элементов из одного списка в другой.

+0

Tenan благодарит за ответ, да TransactionItem - это класс – shamim

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