我正在尝试构建一个将一类项添加到另一个类中的函数。每当我添加一个新项目时,它会复制该项目,但是我曾多次尝试添加新项目。
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);
}
答案 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);
}