Ich habe einen Code, der sehr viele Duplikate enthält. Das Problem kommt von der Tatsache, dass ich mit verschachtelten IDisposable
-Typen zu tun habe. Heute habe ich etwas, das aussieht:
Der gesamte verschachtelte using
-Block ist für jede dieser Methoden gleich (zwei werden angezeigt, aber es gibt ungefähr zehn davon). Das einzige, was anders ist, ist, was passiert, wenn Sie auf die innere Ebene der Blöcke using
gelangen.
Eine Art, wie ich dachte, wäre, etwas in der Art von:
zu tun %Vor% Das funktioniert, es ist nur irgendwie klobig (als Mensch) zu analysieren. Hat jemand andere Vorschläge, wie man die Code-Duplizierung um verschachtelte using
-Blöcke reduzieren könnte? Wenn sie nicht IDisposable
wären, würde man wahrscheinlich nur eine Methode erstellen, um die Ergebnisse zurückzugeben von b.GetC(innerId)
... aber das ist hier nicht der Fall.
Ich mag die Antwort von BFree als Anfang, aber ich würde ein paar Änderungen vornehmen.
> %Vor%Danach können Sie etwas tun wie:
%Vor%Beachten Sie, dass MyCompositeDisposable wahrscheinlich try / finally-Blöcke im Konstruktor und Dispose-Methoden haben muss, damit Fehler bei der Erstellung / Vernichtung dafür sorgen, dass nichts zu Ende geht.
Wenn Ihre Dispoable
-Typen alle verfügbaren Mitglieder korrekt entsorgen, benötigen Sie nur eine using-Anweisung.
Zum Beispiel:
%Vor%könnte dies werden, wenn a hatte Mitglieder von Typ b und c, und eine entsorgt von b und c in seiner Methode entsorgen:
%Vor%Sie müssten Ihre Fabrik ändern, um b und c in a einzugeben, jedoch.
Tags und Links c# refactoring using-statement code-duplication