9 раз из 10, бесконечные ошибки рекурсии вызваны неправильными средствами доступа к свойствам:
public class BrokenClass
{
private string name;
public string Name
{
get { return name; }
set { Name = value; } // <--- Whoops
}
}
У меня также было такое, когда я делал серьезные рефакторинги с перегрузками методов; иногда вы случайно получаете метод, вызывающий себя, когда он должен вызвать другой перегруженный метод.
В любом случае, вы должны быть в состоянии определить, просматривая стек вызовов для исключения и проверяя повторяющийся шаблон. Если вы видите один, то ваша проблема где-то в этом цикле.
Редактировать - ну, исходя из вашего примера кода, вы определенно имеете бесконечную рекурсию в инициализаторах. Я понятия не имею, что должен делать этот код, но он никогда не закончится. StringCustom
немедленно создает RetrieveValues
, что немедленно создает еще один StringCustom
и т. Д.
Это одна из причин, по которой циклические зависимости классов обычно считаются запахом кода. Всякий раз, когда вы видите ClassA
в зависимости от ClassB
и ClassB
в зависимости от ClassA
, вам следует попытаться выполнить рефакторинг; Исключение составляют случаи, когда ClassB
полностью принадлежит и управляется ClassA
(то есть внутренним классом), что здесь явно не так. Вам нужно как-то устранить одну из зависимостей.