C#列表项值不一致

时间:2019-01-11 03:20:01

标签: c#

我正在将值添加到我的列表中,并且它使用新分配的值覆盖了先前的值。我想这与引用类型和值类型有关。

class EODSales
{
    public string Sales { get; set; }
    public int TC { get; set; }
    public decimal Amount { get; set; }
}

class EODBO
{
    public string Sales { get; set; }

    public List<EODSales> Values { get; set; }
}
.
.
.
.
List<EODSales> EODSalesList = new List<EODSales>();
List<EODBO> eodboList = new List<EODBO>();
.
.
.
//Inside a method - 

EODSales sales = new EODSales();
sales.Sales = "Prev";
sales.TC = 5;
sales.Amount = 500;
EODSalesList.Add(sales);

EODBO obj = new EODBO();
obj.Sales = "Baking Order";
obj.Values = EODSalesList;
eodboList.Add(obj);


//Inside another method 
EODSales sales = new EODSales();
sales.Sales = "Prev";
sales.TC = 10;
sales.Amount = 1000;
EODSalesList.Add(sales);

EODBO obj = new EODBO();
obj.Sales = "Refund";
obj.Values = EODSalesList;
eodboList.Add(obj);

我希望我的eodboList像这样:列表中的第一项具有Sales =“ Baking Order”,值具有“ Prev”,5和500。而列表中的第二项具有Sales =“退款”和值分别为“上一个”,10和100。 我当前的代码只是将EODBO.Values分配给列表中的所有其他项目,这意味着我的第一项“烘烤订单”的值为“ Prev”,10和100。

更新 我将EODBO中的值更改为 公开EODSales价值观{组; } 这是我的代码 https://dotnetfiddle.net/dHNr9o

2 个答案:

答案 0 :(得分:1)

 You have to change your code  as like 
 below:
      // First Method
        EODSales sales = new EODSales();

        sales.Sales = "Prev";
        sales.TC = 5;
        sales.Amount = 500;
        EODSalesList.Add(sales);

        EODBO obj = new EODBO();
        obj.Sales = "Baking Order";
        obj.Values.Add(sales);
        eodboList.Add(obj);

Same way, You have change into second method:

replace obj.Values=sales  to obj.Values.Add(sales)

答案 1 :(得分:0)

您正在对 eodboList 中的所有项目使用 EODSalesList ,快速修复:

ts