如果using语句抛出异常,我如何处置IDisposable对象?

jpo*_*poh 4 c# dispose idisposable exception

IDataReader如果ExecuteReader抛出异常,我如何确保在下面的代码片段中被丢弃?

using (IDataReader rdr = cmd.ExecuteReader())
{
    // use it
}
Run Code Online (Sandbox Code Playgroud)

我觉得using合成糖不会调用Dispose(因为没有实例可以调用它).但是,我怎样才能确定通常由实现IDisposable的类分配的稀缺资源将被释放?

sis*_*sve 14

如果在您的示例中,ExecuteReader抛出异常,则它永远不会返回任何内容.然后由ExecuteReader实现,以处理在异常之前创建的任何内容.

  • @jpoh - 它**有**; 调用者没有任何对象可以尝试清理.在最坏的情况下,终结者将开始. (3认同)