将对象添加到列表值后更改对象的更改

时间:2018-02-24 06:04:35

标签: c#

List<ExShippingBillDetails> ExShippingBillDetailsList = new List<ExShippingBillDetails>();   
for( int i=1; i <BillsArray.Length; i++ )
{
    List<ExShippingBillDetails> ExShippingBillList = new List<ExShippingBillDetails>();
    ExShippingBillList = FinalModel( ShippingBillDetailSArray, _ExShippingBillDetails );
    ExShippingBillDetailsList.Add( ExShippingBillList[0] );
    ExShippingBillList = new List<ExShippingBillDetails>();
}

将对象添加到列表后,当我更改对象的属性值(ExShippingBillList)时,列表中的值也会更改。我不想更改列表中的值。

1 个答案:

答案 0 :(得分:1)

解决方案很简单。当对象被添加到新列表中时,通过引用传递您在外部进行的任何更改也将影响原始列表。我已经尝试了您的示例并通过在添加到此行的列表时创建新对象来解决您的问题。

ExShippingBillDetailsList.Add( ExShippingBillList[0] );

这就是我避免价值变化的方法。

List<ExShippingBillDetails> ExShippingBillDetailsList = new List<ExShippingBillDetails>();
List<ExShippingBillDetails> ExShippingBillList = new List<ExShippingBillDetails>();
ExShippingBillList.Add(new ExShippingBillDetails() { number = 1 });
ExShippingBillList.Add(new ExShippingBillDetails() { number = 2 });
ExShippingBillList.Add(new ExShippingBillDetails() { number = 3 });
ExShippingBillDetailsList.Add(new ExShippingBillDetails(ExShippingBillList[0]));
ExShippingBillList[0].number = 5;
//Now changing property values doesn't affect ExShippingBillDetails list

class ExShippingBillDetails
{
    public int number { get; set;}
    public ExShippingBillDetails()
    {

    }

    //you need to add this constructor to copy the values
    public ExShippingBillDetails(ExShippingBillDetails n)
    {
        number = n.number;
    }
}

这应该可以解决您现在面临的问题。祝你好运:)