This question is close to what I want to do, ma non proprio lì.Riesci a rilevare più di un tipo di eccezione con ogni blocco?
C'è un modo per semplificare il seguente codice?
private bool ValidDirectory(string directory)
{
if (!Directory.Exists(directory))
{
if (MessageBox.Show(directory + " does not exist. Do you wish to create it?", this.Text)
== DialogResult.OK)
{
try
{
Directory.CreateDirectory(directory);
return true;
}
catch (IOException ex)
{
lblBpsError.Text = ex.Message;
}
catch (UnauthorizedAccessException ex)
{
lblBpsError.Text = ex.Message;
}
catch (PathTooLongException ex)
{
lblBpsError.Text = ex.Message;
}
catch (DirectoryNotFoundException ex)
{
lblBpsError.Text = ex.Message;
}
catch (NotSupportedException ex)
{
lblBpsError.Text = ex.Message;
}
}
}
return false;
}
Sembra uno spreco, e se poi voglio cambiare il modo segnalo un errore indietro per l'utente, o forse voglio registrare questi errori, o qualsiasi altra cosa, quindi ho avuto modo di cambiare 5 diversi prendere blocchi. Mi sto sfuggendo qualcosa, o è palesemente contro il riutilizzo del codice?
Sto solo cercando di essere (troppo) pigro?
Questo potrebbe essere semplificato un po '- rimuovere DirectoryNotFoundException e PathTooLongException perché (ex è IOException) restituirà true per loro –
No non lo farà. L'operatore 'is' è molto preciso, non restituirà true per le sottoclassi, solo quella classe esatta. Ho pensato anche a questo, quindi l'ho testato su LINQPad. –
Matthew, il seguente codice di test restituisce true. Non sono sicuro del motivo per cui hai ottenuto il risultato diverso ... try { throw new DirectoryNotFoundException(); } catch (Exception ex) { return (ex is IOException); } –