Если я правильно понимаю вашу проблему, у вас есть цикл for следующим образом:
for(int i = 0; i < 100; i++)
{
DoComplexProcessing();
}
DoComplexProcessing
затем вызывает другой метод, который вызывает другой метод и т. Д.
Как только вы опуститесь, скажем, на 4 уровня, вы обнаружите условие (каким бы оно ни было) и хотите прервать эту итерацию вашего DoComplexProcessing
.
Предполагая, что это правильно, я хотел бы иметь объект, который перемещается вместе с цепочкой методов в качестве параметра out
. На каждом уровне, после того, как найдено "плохое" условие, я бы возвратил ноль (или какой-либо другой параметр по умолчанию значение, когда ноль не является опцией), и установите контрольный объект в состояние, которое означает «прервать». Затем каждый метод проверяет состояние «abort», а затем выполняет тот же вызов «return null, установите для объекта значение« abort ».
Примерно так:
TracerObject tracer = new tracer("good");
for(int i = 0; i < 100; i++)
{
DoComplexProcessing(out tracer)
if(tracer.status == "abort") DoSomethingElse()
}
следующий метод может сделать это
DoComplexProcessing(out TracerObject tracer)
{
var myObject = new MyObject()
myObject.Property = DoSlightlyLessComplexProcessing(myObject, out tracer)
if(tracer.Status == "abort")
{
//set myObject.Property to some default value
}
return myObject;
}
}