c# - 您能否在每个 block 中捕获不止一种类型的异常?

标签 c# try-catch

<分区>

This question is close to what I want to do , 但不完全是。

有没有办法简化下面的代码?

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 block 。我是否遗漏了什么,或者这是否公然反对代码重用?

我只是想变得(太)懒惰吗?

最佳答案

你可以使用:

catch (SystemException ex)
{
  if(    (ex is IOException)
      || (ex is UnauthorizedAccessException )
// These are redundant
//    || (ex is PathTooLongException )
//    || (ex is DirectoryNotFoundException )
      || (ex is NotSupportedException )
     )
       lblBpsError.Text = ex.Message;
    else
        throw;
}

关于c# - 您能否在每个 block 中捕获不止一种类型的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1305089/

相关文章:

c# - 对于结构,我是否必须在 C# 中显式调用构造函数?

java - try 和 catch 的 url 连接错误

C# - 围绕抛出自定义异常或处理案例构建逻辑更好吗?

java - 在一个 catch block 中处理所有 Java 异常

c# - ASP MVC Web API + EF 中带有时区的日期时间

c# - 使用 HtmlAgilityPack 解析 HTML 页面

c# - 将文件名(字符串参数)从子窗口传递到父窗口的非静态方法

java - 在 try block 内,FileIStream 变量可能尚未初始化错误

fonts - 如何在NSIS中使用try catch

c# - 我们如何在设置和部署项目中设置产品名称、公司名称等?