如何解决CA2213 在处置模式中使用空条件运算符时触发
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”包含字段 'HandlerBase.threadPool' 是 Idisposable 类型:'SemaphoreSlim'。 更改“HandlerBase”上的 dispose 方法以调用 dispose 或 Close 这个字段。
解决方法
正如怀疑的那样,这似乎是 Roslyn 分析器的一个错误。
CA2213 triggers when using null conditional operator #291
它似乎在以后的版本中得到了修复(如果我没看错的话);但是,如果这对您不适用,或者它仍然无法正常工作,您可以取消警告/错误或仅删除 null 条件并手动检查 null:
if(threadPool != null)
threadPool.Dispose();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。