如何在 C# 中将 try-catch-finally 块转换为 using 语句?

How to convert a try-catch-finally block to using statement in c#?

假设我们创建了一个 IDisposable 对象,并且我们有一个 try-catch-finally 块

var disposable= CreateIDisposable();
try{
  // do something with the disposable.
}catch(Exception e){
  // do something with the exception
}finally{
  disposable.Dispose();
}

如何将其转换为 using 块?

如果是

var disposable= CreateIDisposable();
try{
  // do something with the disposable.
}finally{
  disposable.Dispose();
}

我会转换为

using(var disposable= CreateIDisposable()){
     // do something with the disposable.
}

如何使用 catch 块执行此操作?

try{
  using(var disposable= CreateIDisposable()){
     // do something with the disposable.
   }
}catch(Exception e){
  // do something with the exception
}

你很接近。正好相反。

实际上,CLR 没有 try/catch/finally。它有 try/catchtry/finallytry/filter(当 when子句用于 catch)。 C# 中的 try/catch/finally 只是 try/[ 的 try 块中的 try/catch =13=].

因此,如果您展开它并将 try/finally 转换为 using,您将得到:

using (var disposable = CreateIDisposable())
{
    try
    {
        // do something with the disposable.
    }
    catch (Exception e)
    {
        // do something with the exception
    }
}