C# получить свойство в List, что приводит к переполнению стека

Здравствуйте, я довольно новичок в C#, поэтому я не совсем уверен, что то, что я пытаюсь сделать, возможно,

Я в основном пытаюсь установить свойство get в List, когда этот список загружается, он будет читать информацию из другого списка, методология такова:

Если родительский список пуст, создайте новый список. В противном случае переберите элементы родительских списков и обработайте каждый соответственно

Однако метод get приводит к переполнению стека, при запуске его через отладчик, который, кажется, запускается снова и снова, пока стек не сработает, даже если он обработал мой оператор return

Вот код:

public ICollection<History> History
    {
      get {
            if (HistoryKeyCount == 0)//HistoryKeyCount = Count of Parent List
            {
                    History = new List<Histories>();
            }
            else
            {
                History = new List<Histories>();//Created again because after each read object is dropped from memory
                foreach (HistoryKey x in ParentList)
                {
                    if (x.Key == null)
                    {
                        // Do nothing
                    }
                    else
                        History.Add(ObjectFinder.FindObject<ParentList>(x.Key));
                }

            }
            return History;
        }
        set {
            //Not implemented yet
            }
      }

Что происходит, когда он входит в метод get, достигает оператора if, создает новый объект, возвращает его, затем делает это снова и снова, пока не возникнет исключение stackru

Проблема не в классе ObjectFinder или создании новых методов, они даже не достигаются при возникновении ошибки.

Первоначально я думал, что это новый объект, создаваемый после каждого экземпляра оператора if, однако после добавления флага, чтобы он создавался только после того, как проблема не устранена.

Кто-нибудь когда-нибудь сталкивался с этой проблемой раньше? Потому что это поставило меня в тупик!!

---- РЕДАКТИРОВАТЬ --- Я забыл упомянуть, что я использую платформу голых объектов для.NET, которая вполне может быть источником проблемы

1 ответ

Решение

Вы называете Историю внутри Истории, поэтому она становится рекурсивной.

History.Add(ObjectFinder.FindObject<ParentList>(x.Key));

перезвонит в вашу собственность и снова окажется в той же строке, а затем снова вызовет себя.... пока вы не исчерпаете стек

также, в конце, вы перезвоните в Историю снова..... это не может сбежать:)

У меня такое ощущение, что вы либо хотите локальную переменную, чтобы хранить коллекцию для возврата, либо вы хотите, чтобы личное поле содержало список. в любом случае, не называйте историю в истории

Другие вопросы по тегам