"using"语句中的灾难性故障,即使用(var a = new stream())和a.Something()会引发异常

LLL*_*LLL 1 .net c# idisposable using finalize

所以我理解在using语句结束时,调用dispose方法.

如果我使用a会发生什么 'using(var a = new Stream()) { a.SomethingThrowsAnException() }'

流是否仍然通过他处理方法?

我写了一个实现IDisposable的类,它是关键任务,我不会丢失内存中的内容,因此我计划在发生灾难性事件时序列化数据,即我有一个像我正在使用的对象的自定义流.

有什么建议?

谢谢.

JKo*_*Kor 5

是.该using块编译为:

var a = new Stream();
try
{
     a.SomethingThrowsAnException();
}
finally
{
     a.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

  • `finally`块还包含一个`a!= null`检查引用类型`IDisposable`s,这样就不会抛出异常:`using((IDisposable)null){}`(或者你使用的方法是返回null). (3认同)