代码之家  ›  专栏  ›  技术社区  ›  eomeroff

捕获异常C#

  •  4
  • eomeroff  · 技术社区  · 14 年前

    捕捉从最特定到最一般或相反的异常。

    try
    {
    ...
    }
    catch( Exception e )
    {
    ...
    }
    catch( NullReferenceException nre )
    {
    ...
    }
    

    是否会捕获NullReferenceException nre?

    9 回复  |  直到 14 年前
        1
  •  0
  •   Arnis Lapsa    14 年前

    最具体的先

    真的

    不,不会被抓住的

        2
  •  14
  •   Darin Dimitrov    14 年前
    try
    {
    ...
    }
    catch( NullReferenceException nre )
    {
    ...
    }
    catch( Exception e )
    {
    ...
    }
    

    我也不会抓到 NullReferenceException null coalescing operator (??) 以确保这个异常永远不会发生。

    抓将军 Exception

        3
  •  2
  •   sloth    14 年前

    不,你必须从最具体到最一般。你的例子必须看起来像

    try
    {
    
    }
    catch(NullReferenceException nre)
    {
    
    }
    catch(Exception e)
    {
    
    }
    

    看见 here (MSDN)

        4
  •  1
  •   kemiller2002    14 年前

    它按你放的顺序排列。将最具体的异常放在顶部,将常规放在底部。

    http://msdn.microsoft.com/en-us/library/0yd65esw.aspx

        5
  •  1
  •   Dzinx    14 年前

    不。你应该从最具体的到一般的捕捉异常。

        6
  •  1
  •   TalentTuner    14 年前

        7
  •  1
  •   user180100 user180100    14 年前

    try块可以抛出多个异常,这些异常可以通过使用多个catch块来处理。记住,更专门的catch块应该在广义catch块之前。否则编译器将显示编译错误。

    Source

        8
  •  0
  •   Will Marcouiller    14 年前

    NullReferenceException 将是第一个进入捕获名单的。

    try {
        ...
    } catch (NullReferenceException ex) {
        ....
    } catch (Exception ex) {
        ...
    }
    

    它指定您希望处理 以一种特殊的方式,你有一些特别的事情要做。然后,让其他类型的异常通过最通用的捕获。另一方面,应避免非特定的异常处理,正如本MSDN文章所建议的那样: Exception Handling .

    Exception Handling Best Practices in .NET .

        9
  •  0
  •   Will Marcouiller    14 年前

    try {
       ...
    } catch (IOException ex) {
      ....
    } catch (Exception ex) {
       ...
    }