C# 在FormClosed处处理字段,而不获得VS代码分析警告

C# 在FormClosed处处理字段,而不获得VS代码分析警告,c#,dispose,visual-studio-2019,C#,Dispose,Visual Studio 2019,我想我的问题的重点是:什么是最佳实践,或者Visual Studio 2019在处理项目方面给了我错误的提示?谈到了代码分析中的错误,但处理项目仍然有点超出了我的专业知识范围 我有一个表单,其中声明了一些字段: 公共部分类FormRequestLines:表单 { 过程视图和过程; 过程视图和过程; 标签; ...... 这些字段用于(重新)启动和终止进程,并以不同的方法写入和隐藏新创建的标签 为了处理这些字段,我创建了一个FormClosed方法: private void FormReq

我想我的问题的重点是:什么是最佳实践,或者Visual Studio 2019在处理项目方面给了我错误的提示?谈到了代码分析中的错误,但处理项目仍然有点超出了我的专业知识范围

我有一个表单,其中声明了一些字段:

公共部分类FormRequestLines:表单
{ 
过程视图和过程;
过程视图和过程;
标签;
......
这些字段用于(重新)启动和终止进程,并以不同的方法写入和隐藏新创建的标签

为了处理这些字段,我创建了一个FormClosed方法:

private void FormRequestLines\u FormClosed(对象发送方,FormClosedEventArgs e)
{
如果(view2dProcess!=null){view2dProcess.Dispose();}
如果(view3dProcess!=null){view3dProcess.Dispose();}
如果(label!=null){label.Dispose();}
}
1)处理字段是否正确?
2)这是处理字段的正确方法和位置吗?

Visual studio向我提供以下警告:


Ps:我使用VS的设计器创建表单。

静态代码分析工具要求您在
dispose()
方法中进行dispose处理。您需要覆盖表单中的
dispose
方法并删除
FormRequestLines\u FormClosed

通常,这会在FormRequestLines.Designer.cs文件中自动覆盖,因此您需要将dispose移到代码文件中,以便您可以添加需要添加的任何代码,而无需设计器重写

protected override void Dispose(bool disposing)
{
  if (disposing)
  {
    components?.Dispose();
    view2dProcess?.Dispose();
    view3dProcess?.Dispose();
    label?.Dispose();
  }

  base.Dispose(disposing);
}

有什么理由不在窗体的Dispose方法中执行此操作吗?还可以看看C#的null conditional操作(
),它将使您的null测试看起来更容易。这是正常的,代码分析不够聪明,无法了解有关FormClosed事件的任何信息。窗体类具有适当的Dispose()方法,但它位于somename.designer.cs文件中,编辑该文件是每个人都学会了不做的事情。但是,剪切+粘贴将该方法移动到somename.cs文件是可以的。