“使用”块与“动态”

时间:2015-11-19 17:33:27

标签: c# dynamic using

如果我写

using (dynamic d = getSomeD ()) {
   // ...
}

是否意味着在留下d.Dispose ()块时调用using

d未实现IDisposable时会发生什么?

1 个答案:

答案 0 :(得分:3)

  

是否意味着当使用块时调用d.Dispose()   左?

是。如果类型实现IDisposable,则将调用Dispose

  

当d没有实现IDisposable时会发生什么?

您将获得例外

  

未处理的类型异常   发生了'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'   System.Core.dll
  无法隐式将“YourType”类型转换为“System.IDisposable”。一个   存在显式转换(您是否错过了演员?)

您可以通过以下类来尝试自己:

class MyDisposable : IDisposable //Remove IDisposable to see the exception
{
    public void Dispose()
    {
        Console.WriteLine("Dispose called");
    }
}

然后:

using (dynamic d = new MyDisposable())
{

}