是否需要在C#中显式引发异常?

s_svr

是否需要在try块中明确抛出异常?如果我没有在try块中抛出异常会怎样?

try
{
    // code that throws an exception
    throw new IndexOutofRangeException;
}
catch (IndexOutOfRangeException ex)    
{
   Console.WriteLine(ex.Message);
}

编辑:具体来说,想象中的情况下,存在这样的try块代码生成一个例外,但try块并不会throw声明。会发生什么?

乔尔·科洪

如果我没有在try块中抛出异常会怎样?

如果您不引发异常,并且没有引发其他异常,则该catch块将不会运行。该代码将改为跳过catch块,并继续执行随后发生的任何事情(包括该finally块,如果有的话)。

想象一下在try块中有代码生成异常但try块没有throw语句的情况。

catch块将继续运行......当且仅当该类型的异常被声明的类型相匹配catch块。让我们看几个例子。首先是这个样本:

try
{
   double x = 1 / 0.0;
}
catch (DivideByZeroException ex)
{
    Console.WriteLine(ex.Message);
} 

在这种情况下,我们有导致DivideByZeroException异常的代码由于这与catch块中使用的类型匹配,因此异常处理程序将运行。

接下来:

try
{
   double x = 1 / 0.0;
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
} 

我们仍然有一个DivideByZeroException例外...但是由于DivideByZeroException继承自基本Exception类型,因此仍然兼容,并且catch块将运行。

另一个:

try
{
   double x = 1 / 0.0;
}
catch (InvalidOperationException ex)
{
    Console.WriteLine(ex.Message);
} 

我们仍然有一个DivideByZeroException例外,但是这次catch兼容。在这种情况下,程序将由于未处理的异常而崩溃(除非此异常在程序堆栈中的其他位置处理)。

多一个:

try
{
   double x = 1 / 0.0;
}
catch (InvalidOperationException ex)
{
    Console.WriteLine(ex.Message);
} 
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

两个catch街区!第一个块将不运行,因为它与DivideByZeroException类型不兼容但是,第二个catch块将运行,因为它是兼容的。处理异常,程序可以继续。

最后:

double DbyZ(double numerator)
{
    try 
    {
        return numerator / 0.0;
    }
    catch(InvalidOperationException ex)
    {
        Console.WriteLine("Invalid operation");
    }
} 

...

try
{
     DbyZ(1.0);
}
catch(Exception ex)
{
    Console.WriteLine("Exception");
}

这次,输出将很简单"Exception"请记住,您不必总是在引发异常的地方捕获异常。

如果您仍然对某个案例可能发生的事情有疑问,请创建自己的示例以测试案例并查看。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我是否需要在构造函数中显式初始化std :: unique_ptr?

来自分类Dev

我是否需要在 TidHttp 10.5498 版中显式折叠标题行?

来自分类Dev

为什么我需要在C#显式实现中将'this'转换为接口类型?

来自分类Dev

为什么拆箱需要在C#中进行显式转换?

来自分类Dev

显式引发异常的应用

来自分类Dev

Objective-c:为什么Core Foundation变量需要在ARC中显式发布?

来自分类Java

Java中是否存在接口的C#“显式实现”?

来自分类Dev

我们是否需要在快速关闭中为弱变量显式使用捕获列表?

来自分类Dev

我需要在C#上显式声明一个Dictionary以获取模拟返回值

来自分类Dev

我是否需要在那里显式使用flush()方法?

来自分类Dev

是否需要在LDAP连接池中显式关闭上下文

来自分类Dev

我是否需要在 while 循环之前显式运行 if 语句?

来自分类Dev

C#中的显式结构需要值的双重初始化

来自分类Dev

在Python 2.7中,是否需要显式导入子模块?

来自分类Dev

在A a =(A)b中是否需要显式类型转换;

来自分类Dev

为什么我需要在docker-compose.yml中显式声明env_file?

来自分类Dev

如何检查需要在测试中显式导入的模块的可用性?

来自分类Python

为什么需要在Python方法中显式包含“ self”参数?

来自分类Dev

为什么我们需要在MSIL中显式调用父构造函数?

来自分类Dev

无法选择最佳候选函数。您可能需要在Postgres中添加显式类型转换

来自分类Dev

我需要在.NET中显式调整堆栈大小吗?

来自分类Dev

如果try块不包含显式引发异常的代码,是否有理由仅捕捉异常以再次引发异常?

来自分类Dev

如何在C ++中显式调用抛出异常的方法?

来自分类Dev

等待异步函数时是否需要显式捕获并重新抛出异常?

来自分类Dev

我是否需要在C#中释放对参数的记忆

来自分类Dev

是否需要在不同的操作系统版本中测试 c# winform?

来自分类Dev

是否要在C#中循环?

来自分类Dev

是否有必要在python中显式调用super().__ init __()?

来自分类Dev

您是否需要显式绑定功能?

Related 相关文章

  1. 1

    我是否需要在构造函数中显式初始化std :: unique_ptr?

  2. 2

    我是否需要在 TidHttp 10.5498 版中显式折叠标题行?

  3. 3

    为什么我需要在C#显式实现中将'this'转换为接口类型?

  4. 4

    为什么拆箱需要在C#中进行显式转换?

  5. 5

    显式引发异常的应用

  6. 6

    Objective-c:为什么Core Foundation变量需要在ARC中显式发布?

  7. 7

    Java中是否存在接口的C#“显式实现”?

  8. 8

    我们是否需要在快速关闭中为弱变量显式使用捕获列表?

  9. 9

    我需要在C#上显式声明一个Dictionary以获取模拟返回值

  10. 10

    我是否需要在那里显式使用flush()方法?

  11. 11

    是否需要在LDAP连接池中显式关闭上下文

  12. 12

    我是否需要在 while 循环之前显式运行 if 语句?

  13. 13

    C#中的显式结构需要值的双重初始化

  14. 14

    在Python 2.7中,是否需要显式导入子模块?

  15. 15

    在A a =(A)b中是否需要显式类型转换;

  16. 16

    为什么我需要在docker-compose.yml中显式声明env_file?

  17. 17

    如何检查需要在测试中显式导入的模块的可用性?

  18. 18

    为什么需要在Python方法中显式包含“ self”参数?

  19. 19

    为什么我们需要在MSIL中显式调用父构造函数?

  20. 20

    无法选择最佳候选函数。您可能需要在Postgres中添加显式类型转换

  21. 21

    我需要在.NET中显式调整堆栈大小吗?

  22. 22

    如果try块不包含显式引发异常的代码,是否有理由仅捕捉异常以再次引发异常?

  23. 23

    如何在C ++中显式调用抛出异常的方法?

  24. 24

    等待异步函数时是否需要显式捕获并重新抛出异常?

  25. 25

    我是否需要在C#中释放对参数的记忆

  26. 26

    是否需要在不同的操作系统版本中测试 c# winform?

  27. 27

    是否要在C#中循环?

  28. 28

    是否有必要在python中显式调用super().__ init __()?

  29. 29

    您是否需要显式绑定功能?

热门标签

归档