【问题标题】:Why list show strange behaviour?为什么列表显示奇怪的行为?
【发布时间】:2013-05-19 12:39:19
【问题描述】:

在 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;


                }
    }

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

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

【问题讨论】:

    标签: c# .net list generics entity-framework-4


    【解决方案1】:

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

    默认情况下,作为类的每个类型都是引用类型。这意味着您在列表中拥有的不是事务项的实际值,而是对这些值的引用(想想 C++ 指针)。因此,当您将数据从一个列表复制到另一个列表时,您只是在复制引用。

    您需要将一个列表中的项目clone 发送到另一个列表。为您的类提供一个克隆实例的方法,并使用该方法将项目从一个列表复制到另一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      • 2011-03-08
      • 1970-01-01
      相关资源
      最近更新 更多