【问题标题】:How can I append values in list without changing previous values如何在不更改先前值的情况下在列表中附加值
【发布时间】:2020-09-11 10:59:14
【问题描述】:

我有 C# 课 -

public class Availability
{
  public ushort RegionId {get;set;}
}

那么,我有一个方法GetListOfClassesAsPerIterations(Availability xiAvailability)

我在此方法中有 List,我想在其中附加不同的 RegionId 值。

例如。 List 中的前 100 个元素 RegionId=1500 ,接下来的 100 个元素 RegionId=1400

但是发生的情况是,当我使用 RegionId=1500 添加列表中的前 100 个元素,然后尝试使用 RegionId=1400 添加列表中的下 100 个元素时,List 中的所有项目都变成 RegionId=1400。

我已经为它编写了代码 -

    var lstAvailability = List<Availability>
    for (int i = 0; i < 100; i++)
    {
      xiAvailability.RegionId = 1500;
      lstAvailability.Add(xiAvailability);
    }
    for (int i = 0; i < 100; i++)
    {
      xiAvailability.RegionId = 1400;
      lstAvailability.Add(xiAvailability);
    }

在这里,我可以看到 RegionId 为 1400 的所有 200 个元素。 但相反,我希望前 100 个与 1500 一起,接下来的 100 个与 1400 一起。

还有什么选择?

【问题讨论】:

  • 您的代码中在哪里定义了xiAvailability?您正在为 xiAvailability 设置 RegionId,但将 xiAvailabilitySearch 添加到列表中
  • @zgood 编辑完成,那是错误的。
  • 我认为你必须在循环的每次迭代中新建一个可用性......像这样:var xiAvailability = new Availability();,然后设置 regionId 并添加到列表中。看起来你只是一遍又一遍地添加同一个

标签: c# asp.net .net asp.net-mvc


【解决方案1】:

这是因为您在列表中放置了对同一对象的 200 个引用。如果你想拥有 200 个不同的对象,那么你需要这样做:

var lstAvailability = new List<Availability>();

        for (int i = 0; i < 200; i++)
        {
            var xiAvailability = new Availability();

            if (i < 100)
                xiAvailability.RegionId = 1400;
            else
                xiAvailability.RegionId = 1500;

            lstAvailability.Add(xiAvailability);
        }

如果您需要对 2 个对象有 100 次引用,请执行此操作

        var lstAvailability = new List<Availability>();

        var xiAvailability = new Availability() { RegionId=1400 };
        for (int i = 0; i < 200; i++)
        {                
            if (i == 100)
                xiAvailability = new Availability() { RegionId = 1500 };

            lstAvailability.Add(xiAvailability);
        }

【讨论】:

    【解决方案2】:

    列表中的对象是对实际对象的引用。因此,您会看到 RegionId 的最新值 1400。

    你可以试试下面的,

    var xiAvailability1500 = new Availability();
    xiAvailability1500.RegionId = 1500;
    var xiAvailability1400 = new Availability();
    xiAvailability1400.RegionId = 1400;
    
    var lstAvailability = List<Availability>();
    for (int i = 0; i < 200; i++)
    {
        if (i < 100)
            lstAvailability.Add(xiAvailability1500);
        else
            lstAvailability.Add(xiAvailability1400);
    }
    

    【讨论】:

      【解决方案3】:

      这是另一种替代方式:

      var lstAvailability = List<Availability>
      int count = 0;
      for (int i = 0; i < 200; i++)
      {
        if(count =>  0 && count <= 100)
        {
           xiAvailability.RegionId = 1500;
           lstAvailability.Add(xiAvailability);
        }
        
        if (count => 100)
        {
           xiAvailability.RegionId = 1400;
           lstAvailability.Add(xiAvailability);
        }
        
        count = count + 1;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-05
        • 2011-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-05
        • 1970-01-01
        相关资源
        最近更新 更多