0
foreach (var charac in Artdocument.QuerySelectorAll("section.pi-item")) //Берем все хактеристики, включая дополнительные
{
    if (charac.QuerySelector("h2.pi-header").TextContent == "Характеристики") // Смотри мтолько основные характеристики
    {
        Prop.Clear(); // Очищаем свойства перед их переборкой
        foreach (var character in charac.QuerySelectorAll("div.pi-item")) // Берем все свойства основых характеристик
        {
            if (!character.QuerySelector("h3.pi-data-label").TextContent.Contains("Вес")) // Отсекаем характеристику - вес
            {
                Propname = character.QuerySelector("h3.pi-data-label").TextContent;
                Min = character.QuerySelector("div.pi-data-value").TextContent.Substring(character.QuerySelector("div.pi-data-value").TextContent.IndexOf("[") + 1, character.QuerySelector("div.pi-data-value").TextContent.IndexOf(";") - character.QuerySelector("div.pi-data-value").TextContent.IndexOf("[") - 1).Replace(".", ",");
                Max = character.QuerySelector("div.pi-data-value").TextContent.Substring(character.QuerySelector("div.pi-data-value").TextContent.IndexOf(";") + 1, character.QuerySelector("div.pi-data-value").TextContent.IndexOf("]") - character.QuerySelector("div.pi-data-value").TextContent.IndexOf(";") - 1).Replace(" ", "").Replace(".", ",");
                if (character.QuerySelector("div.pi-data-value").GetElementsByTagName("font").Attr("color").First() == "#a90000")
                { //Красный - плохой эффект
                    Character = "Negative";
                }
                else
                { // Зеленый - положительный
                    Character = "Positive";
                }
                // Console.WriteLine(Propname);
                // Console.WriteLine(Character);
                // Console.WriteLine(Min);
                // Console.WriteLine(Max);
                Prop.Add(new ArtProperty(Propname, Character, Min, Max));
            }
        }
        Artefacts.Add(new Artefact(Artname, Prop));
    }
}

Привет всем опытным разработчикам! Создаю свойство артефакта и использую кешевую переменную Prop. Добавляю в нее свойства вот таким куском кода

Prop.Add(new ArtProperty(Propname, Character, Min, Max))

После - создаю новый объект класса Artefact и пихаю его в Artefacts = new List<Artefact>() вот таким кодом

Artefacts.Add(new Artefact(Artname, Prop))

В чем вопрос? Когда чищу список (Prop.clear) (чтобы обработать новый артефакт и задать ему новые свойства - чистятся свойства уже созданного артефакта в Artefacts ???? Я думаю что это связано с ссылочными типами переменных. Но, как вы понимаете я могу ошибаться). Подскажите - в чем проблема?

До Clear

После

Dmitry D.
  • 3,136
  • 1
    Ссылочные типы же. Prop это ссылка на список, пока вы ей не переприсвоите значение, она будет указывать туда, куда и должна. Prop = new List<ArtProperty>() вместо Prop.Clear() надо. – aepot Nov 15 '23 at 20:10
  • @aepot Т.е когда я делал Artefacts.Add(new Artefact(Artname, Prop)). Я передавал в Artefacts копию ссылки на Prop ? А после Prop = new List() я стер связь между копией ссылки и Prop ? – Владимир Яранцев Nov 15 '23 at 20:22
  • new просто создаёт новый объект. ООП – aepot Nov 15 '23 at 23:59

0 Answers0