C#扔在最后一次抓到

时间:2014-12-11 10:13:56

标签: c# exception-handling

我想知道我对Exception的理解是否不正确。我有以下代码:

try
{
   // ... code calls a function which throws a UASException()
}
catch (UASException ex)
{
    throw;
}
catch (Exception ex)
{
    throw new UASException("An unknown error has occured", ex);
}

现在,当我重新抛出UASException后,它会被以下Catch抓住,这是正确的吗?我认为它应该返回到重新抛出UASException的调用代码。

我能错过什么?

1 个答案:

答案 0 :(得分:2)

不,不。仅挑选一个异常处理程序(具有最佳匹配异常类型的异常处理程序)。你可以轻松尝试,但......


示例:以下代码输出" Catch 1"和" Catch 2",这就是我所说的。无论catch块内是否发生异常,都只执行一个catch。要捕获catch块中的异常,您需要嵌套catch块。

using System;
using System.Collections.Generic;
using System.Text;

namespace CSharp
{
    public class Class1
    {
        public static void Main(string[] args)
        {
           try
           {
              throw new ArgumentException("BANG!");
           }
           catch (ArgumentException)
           {
               Console.WriteLine("Catch 1");
               throw;
           }
           catch
           {
               Console.WriteLine("Catch 2");
           }
        }
    }
}