在C#中"捕获"两种不同类型的异常的两种不同方式.一个比另一个好吗?

Jim*_*Del 3 c# try-catch

我以前从未需要捕获多个例外.但这是我的情景.我想"尝试"复制文件.如果目的地不存在,我不想被它打扰.但是我仍然希望捕获任何其他类型的异常.例如,UnauthorizedAccessException.以下是我尝试过的两件事,但我已经看到了网上使用的两个例子.是一个比另一个更好的编码.或者我两个都完全错了?谢谢.

        catch (DirectoryNotFoundException)
        {
            // Do Nothing
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
Run Code Online (Sandbox Code Playgroud)

要么

        catch (Exception ex)
        {
            if (ex is DirectoryNotFoundException)
            {
                // Do nothing
                return;
            }
            else
            {
                MessageBox.Show(ex.Message);
            }
        }
Run Code Online (Sandbox Code Playgroud)

Kar*_*gam 5

恕我直言,有多个catch会降低代码可读性.所以这就是我想提出的建议.

if (Directory.Exists(dirPath))
        {
            try
            {
                File.Copy(sourceFile, destFile);
            }
            catch (Exception msg)
            {
                //Handle Exception.
            }
        }
Run Code Online (Sandbox Code Playgroud)

  • @pst是正确的; 这段代码现在有一个不可避免的竞争条件.如果DirectoryExists返回时该目录存在,但在File.Copy启动之前被另一个进程删除,那么您仍然可能会遇到异常.试图预测所有可能的"外生"异常通常是不值得的; 有时最好只是抓住异常,处理它,继续前进. (3认同)
  • "DirectoryNotFound"可能会出现*非常小的机会...... (2认同)