将类型转换为IDisposable - 为什么?

AJM*_*AJM 9 c# idisposable

看到这个.为什么显式转换为IDisposable?这只是确保在退出使用块时调用IDisposable的简写吗?

using (proxy as IDisposable)
{
  string s = proxy.Stuff()                                    
}
Run Code Online (Sandbox Code Playgroud)

ang*_*son 26

这个"技巧",如果你可以调用它,很可能是因为proxy它是一种编译器无法验证的类型IDisposable.

关于该using指令的好处是,如果它的参数是null,则Dispose在退出using语句范围时不会进行任何调用.

所以你展示的代码实际上是简单的:

var disposable = proxy as IDisposable;
try
{
    string s = proxy.Stuff();
}
finally
{
    if (disposable != null)
        disposable.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

换句话说,它说"如果这个对象实现了IDisposable,我需要在完成下面的代码时处理它."