Loszuwerden geschachtelte mit(...) Aussagen

Manchmal brauche ich mehrere Einweg-Objekte, die innerhalb einer Funktion. Häufigste Fall ist, dass StreamReader und StreamWriter, aber manchmal ist es sogar mehr als das.

Verschachtelte Anweisungen schnell und hässlich Aussehen.
Um dies zu beheben habe ich eine kleine Klasse, die sammelt IDisposable-Objekten und veräußert er diese, wenn er sich selbst entsorgt.

public class MultiDispose : HashSet<IDisposable>, IDisposable
{
    public MultiDispose(params IDisposable[] objectsToDispose)
    {
        foreach (IDisposable d in objectsToDispose)
        {
            this.Add(d);
        }
    }

    public T Add<T>(T obj) where T : IDisposable
    {
        base.Add(obj);
        return obj;
    }

    public void DisposeObject(IDisposable obj)
    {
        obj.Dispose();
        base.Remove(obj);
    }


    #region IDisposable Members

    public void Dispose()
    {
        foreach (IDisposable d in this)
        {
            d.Dispose();
        }

    }

    #endregion
}

Also mein code sieht jetzt wie folgt aus:

        using (MultiDispose md = new MultiDispose())
        {
            StreamReader rdr = md.Add(new StreamReader(args[0]));
            StreamWriter wrt = md.Add(new StreamWriter(args[1]));
            WhateverElseNeedsDisposing w = md.Add(new WhateverElseNeedsDisposing());

            //code
        }

Gibt es etwas falsch mit diesem Ansatz, die Probleme verursachen können die Straße hinunter?
Ich verließ die Entfernen-Funktion geerbt, die aus der HashSet mit Absicht so, dass die Klasse flexibler gestaltet werden.
Sicherlich Missbrauch dieser Funktion kann zu Objekten führen, die nicht ordnungsgemäß entsorgt, aber dann gibt es viele andere Möglichkeiten, um zu Schießen selbst in den Fuß, ohne zu dieser Klasse.

  • -1: Frage zu subjektiv
  • IMO - nur eine schlechte Idee, auf vielen Ebenen. Ich hoffe, Sie finden die Anleitung hier, um Ihrer selbst Willen, und dass von jedem team-Mitglieder arbeiten mit. Sehen Skeet-Antwort für etwas Klarheit.
  • seien Sie nicht dumm. Wir haben Fragen über die Benennung, Kapital und Einrücken die ganze Zeit hier. Diese ist ziemlich beträchtlichen in-Vergleich.
  • Ok, ich werde versuchen, nicht zu sein... 🙂
InformationsquelleAutor Ghostrider | 2010-05-16
Schreibe einen Kommentar