Ho visto questo tipo di pattern in codice prima:
//pseudo C# code
var exInfo = null; //Line A
try
{
var p = SomeProperty; //Line B
exInfo = new ExceptionMessage("The property was " + p); //Line C
}
catch(Exception ex)
{
exInfo.SomeOtherProperty = SomeOtherValue; //Line D
}
Di solito il codice è strutturato in questo modo perché exInfo deve essere visibile al di fuori della clausola try. Il problema è che se si verifica un'eccezione sulla riga B, exInfo sarà nullo alla riga D. Il problema sorge quando qualcosa accade sulla linea B che deve verificarsi prima che exInfo venga creato. Ma se imposto exInfo su un nuovo oggetto alla riga A, la memoria potrebbe essere trapelata alla riga C (a causa di "nuovo", ovvero l'oggetto lì). C'è un modello migliore per gestire questo tipo di codice? Esiste un nome per questo tipo di modello di inizializzazione?
A proposito, so che potrei verificare exInfo == null prima della riga D, ma mi sembra un po 'goffo e sto cercando un approccio migliore.