大众处理,更好的方式?

Zer*_*ker 2 c# dispose

因此,当我关闭表单时,我正在处理许多对象.即使它可能会自动处理它.但我仍然倾向于遵循处理中的"规则",希望它会坚持并帮助防止错误.

所以这就是我目前处理的方式,哪个有效.

        if (connect == true)
        {
            Waloop.Dispose();
            connect = false;
            UninitializeCall();
            DropCall();

        }
        if (KeySend.Checked || KeyReceive.Checked)
        {
            m_mouseListener.Dispose();
            k_listener.Dispose();

        }
        if (NAudio.Wave.AsioOut.isSupported())
        {
            Aut.Dispose();
        }

        if (Wasout != null)
        {
            Wasout.Dispose();
        }
        if (SendStream != null)
        {
            SendStream.Dispose();
        }
Run Code Online (Sandbox Code Playgroud)

所以基本上,首先是如果一个博尔是真的,意味着如果它不是那些可以被忽略,因为它们没有被我想到.

其他的只是让我处理的方法,如果在那里.但这不是一个非常好的方式,我希望它有一个大功能,意思.

处置,如果没有处置.或者其他的东西.我知道他们中的许多都有"被处置"的布尔,所以如果我可以检查每个对象,并且如果它是假的则应该可以处理.

Cod*_*gue 5

如何使用辅助方法来获取实现IDisposable为params的对象?

void DisposeAll(params IDisposable[] disposables)
{
  foreach (IDisposable id in disposables)
  {
    if (id != null) id.Dispose();
  }
}
Run Code Online (Sandbox Code Playgroud)

如果要处置多个对象,请使用要处置的任何对象调用该方法.

this.DisposeAll(Wasout, SendStream, m_mouseListener, k_listener);
Run Code Online (Sandbox Code Playgroud)

如果你想避免将它们称为明确,那么将它们全部存储在List<>:

private List<IDisposable> _disposables;

void DisposeAll() {
  foreach(IDisposable id in _disposables) {
    if(id != null) id.Dispose();
  }
}
Run Code Online (Sandbox Code Playgroud)