Dato che stavo inserendo del codice TDD, mi è venuto in mente che una delle mie eccezioni digitate poteva potenzialmente generare NullReferenceException durante la creazione del suo messaggio di errore.
Ecco il costruttore per l'eccezione tipizzata in questione:
public class MyTypedException : Exception
{
public MyTypedException(String expectedValue, ICollection<String> possibleValues)
{
String message = String.Format("Failed to find {0}. Possible values:", expectedValue);
foreach(var value in possibleValues)
{
message = String.Concat(message, ", ", value);
}
/* Assigns message to property, etc... */
}
}
Se possibleValues è nullo, il costruttore di MyTypedException genererà un NullReferenceException . La mia prima reazione fu di pensare "Bene, controlla solo se possibleValues è nullo, e se lo è, lancia un ArgumentNullException . Tuttavia, lanciare un'eccezione diversa dal costruttore di un'escrizione sembra ... sbagliata.
L'alternativa sarebbe controllare se possibleValues è nullo o vuoto, e se lo è, crea un messaggio diverso, in questo modo:
public MyTypedException(String expectedValue, ICollection<String> possibleValues)
{
String message = String.Empty;
if (possibleValues == null || possibleValues.Count <= 0)
message = "Failed to find {0} because the collection of possibles values is null or empty";
else
{
message = String.Format("Failed to find {0}. Possible values:", expectedValue);
foreach (var value in possibleValues)
{
message = String.Concat(message, ", ", value);
}
}
/* Assigns message to property, etc... */
}
È mai consentito lanciare un'eccezione diversa quando si tenta di creare un'eccezione?