Codeanalyse - Objekt nicht mehrfach entsorgen

8

Ich habe versucht, die Regeln der Code-Analyse für diese Methode zu befolgen:

%Vor%

hat alle Try {} Finaly{} Blöcke hinzugefügt, aber es schrie mich immer noch an, dass ich Regel 2202 nicht respektiere. kann mir jemand dabei helfen?

Ja, ich habe andere Beiträge zu diesem Thema gelesen und habe versucht, sie anzuwenden, aber am Ende bekomme ich immer noch die gleiche Nachricht.

    
Dementic 02.02.2012, 09:54
quelle

4 Antworten

13

Um die CA2202-Warnung für cs zu entfernen, entfernen Sie einfach den Aufruf der Methode Close .

Das CA2202-Problem für ms ist ein bisschen komplexer. Die Warnung taucht auf, weil CryptoStream die Unverschämtheit hat, den Stream, den sie über ihren Konstruktor erhalten hat, zu disponieren, was bedeutet, dass es einen unangemessenen Aufruf von ms.Close() gibt, den Sie nicht vermeiden können. Die gute Nachricht ist, dass diese vorzeitige Disposition in Ihrem Fall keine Nebenwirkungen hat, und dasselbe gilt für die doppelte Disposition, so dass Sie sicher auf ein SuppressMessageAttribute schlagen und das Problem ignorieren können. (In Fällen, in denen Sie den Stream tatsächlich passieren müssen, um seine unausweichliche Disposition durch etwas wie CryptoStream zu überstehen, besteht die übliche Technik darin, eine Stream-Subklasse zu verwenden, deren Anordnung durch ihren Instanziierungscode verhindert werden kann.)

    
Nicole Calinoiu 02.02.2012, 13:41
quelle
2

Entfernen Sie diese beiden Zeilen, sie werden nicht benötigt:

%Vor%     
Ray 02.02.2012 09:56
quelle
2

Folgen Sie der Dokumentation zu diesem Thema , um zu diesem Code zu gelangen:

%Vor%     
Daniel Hilgarth 02.02.2012 10:01
quelle
2

Die Dokumentation zu dieser Analysewarnung ( Ссылка ) gibt Ihnen ein Beispiel, das Ihrem Beispiel ähnelt dass es Streams manipuliert:

%Vor%

aber das gibt immer noch den Fehler. Folgendes wird den Fehler beheben:

%Vor%

Der Grund ist einfach; wenn der Autor den Stream immer für dich entsorgt. Nur im Szenario wird der Writer nicht erfolgreich erstellt, wenn Sie den Stream selbst entsorgen. Aber ich muss zugeben, ich mag die folgende Syntax viel mehr, und wenn Sie einen MemoryStream anstelle eines FileStream erstellen, ist die Chance auf eine Ausnahme gering und ich würde lieber die CA unterdrücken. Bitte beachten Sie, dass Sie mit Anweisungen stacken können, so dass eine zusätzliche "Verschachtelungsebene" oft nicht benötigt wird.

%Vor%     
NP83 10.10.2012 06:58
quelle

Tags und Links