【发布时间】:2021-02-25 02:47:24
【问题描述】:
我正在开发一个将静态代码分析设计警告视为错误的代码库。
当我像这样实现我的 Dispose() 方法时:
public void Dispose()
{
threadPool?.Dispose();
GC.SuppressFinalize(this);
}
我得到的错误
错误 CA1063:Microsoft.Design:修改 'HandlerBase.Dispose()' 所以 它调用 Dispose(true),然后调用 GC.SuppressFinalize 当前对象实例(Visual Basic 中的“this”或“Me”),然后 返回。
所以我修改它以遵循 CA1063 预期的模式
protected virtual void Dispose(bool disposing)
{
if (disposed)
{
return;
}
if (disposing)
{
threadPool?.Dispose();
}
disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
它不再意识到我正在处理对象:
错误 CA2213:Microsoft.Usage:“HandlerBase”包含字段 IDisposable 类型的“HandlerBase.threadPool”:“SemaphoreSlim”。 将“HandlerBase”上的 Dispose 方法更改为调用 Dispose 或 Close on 这个字段。
【问题讨论】:
-
也许它被 null 条件弄糊涂了?删除它,看看你是否仍然得到错误
-
@00110001 就是这样!谢谢!
标签: c# dispose static-analysis