代码检查:处理已被 'using' 语句捕获的变量
如果一个实现了 IDisposable 的类型的变量在 using 语句中声明,或使用 using 声明,您不应在此变量上调用 Dispose()。 当退出相应的代码块时, Dispose() 将自动在其包含的对象上调用。 通过手动调用 Dispose() ,您实际上是两次调用了此方法,这可能导致意外行为或错误。
using (var disposable = new MyDisposable())
{
// Warning
disposable.Dispose();
}
此检查不仅报告在 Dispose() 上下文中调用 using 的情况,还报告处理资源释放的自定义方法。 此类方法应使用 [HandlesResourceDisposalAttribute]标记,来自 JetBrains.Annotations。
class DisposalSample
{
void HandleDisposal(
[HandlesResourceDisposal] MyDisposable resource)
{
// Custom disposal implementation
}
void Test()
{
using (var disposable = new MyDisposable())
{
// Warning
HandleDisposal(disposable);
}
}
}
最后修改日期: 2025年 9月 27日