Я решил этот вопрос, создав глубокую копию объекта. Но мне нужно понять, что происходит ... почему он добавляет и бесконечный объект l oop внутри себя, если не использует Deep Copy.
Вопрос:
- childProduct и parentProduct - это класс NewProduct, в котором в качестве свойства указано «ChildProducts»;
- Я пометил в коде цифры 1 и 2;
- 1 - parentProduct.ChildProducts очищен;
- 2 Где волхвы c. Когда он добавляет childProducts в список parentProduct.ChildProducts, он создает бесконечно l oop с собой внутри себя (один и тот же объект внутри самого поля ChildProducts) ... и так далее ... Это вызывало у меня исключение stackoverflow, когда мне было нужно в l oop это поле ... но когда я добавил .Clone () он прекратил создавать эту рекурсивную вставку.
ПОЧЕМУ?
public class NewProduct {
public int Id { get; set; }
public string Name { get; set; }
public List<NewProduct> ChildProducts { get; set; }
}
public List<NewProduct> BuildParentProductsBasedOnChildrenProducts(List<NewProduct> allProducts) {
var childProducts = allProducts.FindAll(prod => prod.IsChildProduct);
var parentProducts = new List<NewProduct>();
foreach (var childProduct in childProducts) {
var parentProduct = allProducts.Find(prod => prod.ProductIdSku == childProduct.VariationId);
if (parentProduct != null)
{
parentProduct.ChildProducts.RemoveAll(); **<<<<< 1**
parentProduct.ChildProducts.Add(childProduct.Clone()); **<<<<<<< 2**
parentProducts.Add(parentProduct);
}
}
return parentProducts;
}