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

时间:2011-07-20 21:36:35

标签: c# try-catch

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

        catch (DirectoryNotFoundException)
        {
            // Do Nothing
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

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

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:4)

第一种选择是更好的形式,但实际上它们都同样有效。

使用第一个,它可以提供更清晰的代码

答案 2 :(得分:3)

一条建议:从不捕获您不打算处理的异常:

catch (DirectoryNotFoundException)
{
    // Do Nothing
}

就你的问题而言,我更喜欢第一种方法(假设你当然知道如何处理你所捕获的每一个例外)。

答案 3 :(得分:3)

我会选择第一个,原因有三个:

  1. 它读起来更好(IMO)。
  2. 我会关注第二个ex is DirectorNotFoundException语句的开销。
  3. 第一个也更容易修改 - 如果你必须陷入第三种类型的异常,或第四种,或者......?
  4. 会发生什么?

    请确保按正确顺序捕获例外情况。