Non ho bisogno di una lezione per passare da metodi ricorsivi a non ricorsivi, voglio solo sapere perché non possiamo affrontare questo tipo di eccezione. Indipendentemente da ciò, sto usando funzioni ricorsive su liste molto grandi.C# - Come si gestisce/cattura StackOverFlowExceptions?
Ho scritto il codice per tentare di catturare StackOverFlowExceptions:
try { recursiveFxn(100000); }
catch(Exception){}
private void recursiveFxn(int countdown)
{
if (countdown > 0)
recursiveFxn(countdown - 1);
else
throw new Exception("lol. Forced exception.");
}
Ma ancora ottengo programma va in crash (sia in NUnit e una pagina web sto correndo). Perché non viene rilevata l'eccezione?
Sono piuttosto sorpreso che questa eccezione esista ... al di fuori del codice gestito, non sono convinto che sia possibile recuperare da questo errore in generale. –
@RobertKarl: Vorrei che esistesse un mezzo tramite il quale il codice potesse verificare esplicitamente lo stack per una certa quantità di spazio, con un'eccezione generata se lo spazio non era disponibile. Se un tale metodo ha gettato l'eccezione prima che lo stack trabocchi, e se la quantità di spazio richiesta era almeno uguale alla somma del massimo circa dello stack che verrà assegnato tra i test, più l'importo richiesto per il codice di ripristino, tali eccezioni potrebbero essere recuperabile al 100%. Così com'è, non conosco il modo di scrivere codice ricorsivo sicuro che non limiti artificialmente la profondità delle strutture che può gestire. – supercat