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?