返回「计算机、信息技术与工程」

Exception

更多
Markdown 结构化数据
本文目录 2 个章节

Exception

创建时间:2020/6/1 11:34

throw的异常路径问题

参考:https://blog.csdn.net/wangtian2014/article/details/51593789

  1. 例1throw的时候使用了参数ex,虽然会抛出同样的异常,但是异常的堆栈信息缺在throw的时候被改变了,我们在接下来的try块中无法获取异常的原始信息。

  2. 例2没有参数,这个无参的throw可以看做为rethrow(即继续抛出),他会抛出之前捕获到的所有异常。

  3. 例3则完全是一个新的异常,class1中抛出的异常被当做内部异常,存放在inner exception中

class MyClass<T, U>
    where T : class
    where U : struct
{ }
class MyClass<T, U>
    where T : class
    where U : struct
{ }
class MyClass<T, U>
    where T : class
    where U : struct
{ }

InnerException

当 Y上一个异常的直接结果引发 X 异常时,X 的 InnerException 属性应包含对 Y的引用。 你可以创建一个新的异常来捕获更早的异常。 处理第二个异常的代码可以利用以前异常中的其他信息来更正确地处理错误。

class MyClass<T, U>
    where T : class
    where U : struct
{ }

新的异常可以添加新的信息,新异常的堆栈信息包含InnerException的堆栈信息