首页 > 解决方案 > 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 是这样的:列表中的第一项具有 S​​ales =“Baking Order”,值具有“Prev”、5 和 500。而列表中的第二项具有 S​​ales =“Refund”和值分别有“Prev”、10 和 100。我当前的代码只是将 EODBO.Values 分配给列表中的所有其他项目,这意味着我的第一个项目 Baking Order 具有“Prev”、10 和 100 的值。

更新我将 EODBO 中的值更改为 public EODSales Values { get; 放; 这是我的代码 https://dotnetfiddle.net/dHNr9o

标签: c#

解决方案


 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)

推荐阅读