为什么名单表现出奇怪的行为

本文关键字:名单 为什么 | 更新日期: 2023-09-27 18:14:13

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;

                }
    }

请帮我找出为什么会出现这个问题,如何解决这个问题。

如有任何疑问请询问,谢谢。

为什么名单表现出奇怪的行为

TransactionItem可能是一个类,对吧?而不是结构体

默认情况下,每个类类型都是引用类型。这意味着列表中包含的不是事务项的实际值,而是对这些值的引用(想想c++指针)。所以当你把数据从一个列表复制到另一个列表时,你只是复制了引用。

您需要将项目从一个列表克隆到另一个列表。给你的类一个克隆实例的方法,并使用该方法将项目从一个列表复制到另一个列表。