gpt4 book ai didi

c# - 需要在 C# 中显式抛出异常吗?

转载 作者:太空宇宙 更新时间:2023-11-03 22:32:19 25 4
gpt4 key购买 nike

是否需要在try block 中显式抛出异常?如果我不在 try block 中抛出异常会怎样?

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

编辑:具体来说,假设在 try block 中有代码生成异常但 try block throw 语句。会发生什么?

最佳答案

What happens if I don't throw an exception in the try block?

如果您不抛出异常,并且没有引发其他异常,则 catch block 将不会运行。代码将跳过 catch block 并继续执行之后的任何内容(包括 finally block ,如果有的话)。

imagine the case there is code in the try block that generates an exception but try block does not have throw statement.

当且仅当异常的类型catch block 声明的类型相匹配时,catch block 仍将运行...。让我们看几个例子。首先是这个示例:

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

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

下一步:

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

我们仍然有一个 DivideByZeroException 异常...但是由于 DivideByZeroException 是从基本 Exception 类型继承的,所以事情仍然兼容并且捕获 block 将运行。

另一个:

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

我们仍然有一个 DivideByZeroException 异常,但是这次 catch block 是兼容的。在这种情况下,程序会因为未处理的异常而崩溃(除非这个异常在程序堆栈的其他地方被处理)。

还有一个:

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

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

最后:

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"。请记住,您不必总是在抛出异常的地方捕获异常。

如果您对给定案例中可能发生的事情仍有疑问,请创建您自己的示例来测试该案例并查看。

关于c# - 需要在 C# 中显式抛出异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56878573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com