这个问题与我想做的接近,但还不太一样。
有没有一种方法可以简化以下代码?
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;
}
看起来这样做是浪费的,如果我以后想改变如何向用户报告错误,或者我想记录这些错误,或者其他什么,那么我就必须更改5个不同的catch块。我是错过了什么,还是这显然违反了代码重用原则?
我只是在试图变得(太)懒吗?
is
运算符非常精确,它不会返回子类的 true 值,只会对准确的类返回 true。我之前也有这个想法,但在 LINQPad 中测试过了。 - Matthew Scharleythrow new DirectoryNotFoundException(); } catch (Exception ex) { return (ex is IOException); } - Aliaksei Kliuchnikau
SystemException
异常。重新抛出异常并不等同于一开始就不捕获它。除此之外,FxCop和其他类似的程序会警告捕获Exception
异常,而让它们安静下来的最好方法就是不要这样做。 - Matthew Scharleycatch (Exception ex) when (ex.Message.Equals("400"))
。查看:http://www.codeproject.com/Tips/1023426/Whats-New-in-Csharp - Kiquenet