无论何时将新项目添加到列表中,它都会将旧项目替换为刚刚添加的项目c#

时间:2017-05-27 08:13:37

标签: c# list

我正在尝试构建一个将一类项添加到另一个类中的函数。每当我添加一个新项目时,它会复制该项目,但是我曾多次尝试添加新项目。

  myfunction()
   {
   AmazonEnvelopeMessage message = new AmazonEnvelopeMessage();
        List<AmazonEnvelopeMessage> list = new List<AmazonEnvelopeMessage>();
        AmazonEnvelopeLibrary.Models.Product product = new Product() 
   foreach (var s in skus)
        { 
   product.DescriptionData.Title = s.Title;
                product.StandardProductID.Value = s.ASIN;
                product.StandardProductID.Type = StandardProductIDType.ASIN;
                product.ProductData.Item = maincat;
                product.DescriptionData.MSRP.Value = s.MSRP;
                product.DescriptionData.Description = s.description;
           message.Item = product;
            list.Add(message);
      }
      amazon.Envelope.message.AddRange(list);
    }

2 个答案:

答案 0 :(得分:0)

您的代码存在一些问题,但通常这是您的问题

AmazonEnvelopeMessage message = new AmazonEnvelopeMessage();

foreach (...)
{
    list.Add(message); // you keep passing reference to the same object.
}
  

您正在将引用传递给相同的对象。

为了解决这个问题,你需要这样做

foreach (...)
{
    AmazonEnvelopeMessage message = new AmazonEnvelopeMessage();
    list.Add(message); // now you're passing a new one each time
}

答案 1 :(得分:0)

如果&#39; AmazonEnvelopeMessage&#39;和AmazonEnvelopeLibrary.Models.Product&#39;是类,然后你正在处理引用类型问题。在这种情况下,请移动&#39;消息&#39;和&#39;产品&#39;在foreach循环中解决了这个问题。但它并没有解决实际问题。有两种方法可以在C#中将信息保存在内存中;堆栈和堆。我建议你看看另一个用户问的this question。它会让你明白它为什么会发生。

myfunction()
   {
       List<AmazonEnvelopeMessage> list = new List<AmazonEnvelopeMessage>();
       foreach (var s in skus)
       { 
           AmazonEnvelopeMessage message = new AmazonEnvelopeMessage();
           AmazonEnvelopeLibrary.Models.Product product = new Product();
           ...
           message.Item = product;
           list.Add(message);
      }
      amazon.Envelope.message.AddRange(list);
    }