C# 什么是;使调用堆栈冒泡”的;什么意思?

C# 什么是;使调用堆栈冒泡”的;什么意思?,c#,exception,C#,Exception,我在Pluralsight网站上观看了一个关于异常处理的教程 使用错误代码处理错误我们需要添加if语句或switch 用于检查返回代码的语句错误不会在屏幕上冒泡 调用堆栈到更高级别的代码。 我不理解这句话(错误不会使调用堆栈冒泡到更高级别的代码)。这意味着函数返回的错误代码不会触发任何东西,除非调用方显式处理 考虑以下定义函数的伪代码: int f () { ... if (/* some condition that indicates an error */) {

我在Pluralsight网站上观看了一个关于异常处理的教程

使用错误代码处理错误我们需要添加if语句或switch 用于检查返回代码的语句错误不会在屏幕上冒泡 调用堆栈到更高级别的代码。


我不理解这句话(错误不会使调用堆栈冒泡到更高级别的代码)。

这意味着函数返回的错误代码不会触发任何东西,除非调用方显式处理

考虑以下定义函数的伪代码:

 int f ()
 {
     ...
     if (/* some condition that indicates an error */) {
         return 1;
     }
     else {
         return 0;
     }
 }
如果现在只调用函数
f
并发生错误,则除非明确检查返回值是否指示错误,否则不会发生任何事情。根据错误的性质,程序可能会在错误状态下继续运行

此外,调用函数的代码的任何调用方都不会收到该错误的通知,除非它显式返回给他们。这就是“冒泡”的意思。为了说明这一点,考虑调用第一个函数而不检查错误的另一个函数:

int g ()
{
    ...
    f();
    ...
}
现在,任何调用
g
的调用方也不会得到
f
故障的任何指示。如果错误不影响计算,并且整个程序的状态也不影响计算,那么这就可以了。但是,如果丢失的处理是由于程序员的错误(或懒惰)造成的,并且损害了
g
的结果(可能是调用堆栈或整个程序中高于它的任何内容),则不会通知任何人


除了例外,情况正好相反。除非它们被显式处理,否则它们会从一个调用方传递到另一个调用方,也就是说,在调用堆栈中冒泡——想想水中的气泡,它们就会冒泡。

这只是意味着如果一个错误没有在一个方法中处理,它会将错误推送到调用方法,如果这个方法不能处理错误,它会将错误推送到该方法的调用方,直到错误得到处理为止。因为它不断向上寻找处理器,所以它被称为“冒泡”