Ich habe ein Stück Code, die ein wenig wie folgt aussieht:CC Vorschlagen Redundante Sorgt
public TReturn SubRegion(TParam foo)
{
Contract.Requires(foo!= null);
Contract.Ensures(Contract.Result<TReturn>() != null);
if (!CheckStuff(foo))
foo.Blah();
return OtherStuff(foo);
}
CC gibt mir eine Warnung:
Warning 301 CodeContracts: Betrachten Sie die Nachbedingung Vertrag hinzufügen. Stellt sicher (Contract.Result()! = Null); um den Bibliothekskunden eine zusätzliche Dokumentation zu liefern
Das ist offensichtlich völlig redundant! Ich habe mehrere solche redundanten Warnungen und es wird ein Problem (echte Warnungen werden in einem Strom von redundanten Vorschlägen begraben).
So habe ich zwei Fragen:
1) Bin ich etwas fehlt, was bedeutet, das ist nicht eine redundante Empfehlung? In welchem Fall muss ich diese Warnung beheben?
2) Alternativ, wenn dies nur eine Frage von CCCheck ist und nicht behoben werden kann, wie kann ich diese Warnung verstecken oder unterdrücken?
N.b. Nur für den Fall, dass Sie meinen, dass in meinem Beispiel etwas Wichtiges fehlt, ist der vollständige Code die Subregion Methode here.
Welche Version von Codeverträgen verwenden Sie? –
Mit Blick auf Ihren Code, denke ich, dass das Problem weiter unten liegt. In 'SubRegion' gibt es einen Aufruf von' ConstructFromSlicePart', der wiederum einen Aufruf an 'Construct (IReadOnlyList shape)' hat. Innerhalb von 'Construct' ist die letzte Zeile' return default (TSection) '. Wenn 'TSection' ein Referenztyp ist, gibt die Methode null zurück. Dies könnte die Ursache sein, die sich letztlich als diese Warnung manifestiert. –
CC-Version ist 1.9.10714.2 - soweit ich das sehe ist das das Neueste. re: construct method, sind Sie sicher, dass Sie nicht in der Contracts-Klasse gesucht haben? Die einzige wirkliche Implementierung von Construct ist dies: https://bitbucket.org/martindevans/base-citygeneration/src/0128578a6228487ac3d98398bf0c8ed8bb43d0f5/Base-CityGeneration/Elements/Building/Internals/Floors/Design/Region.cs?at=default&fileviewer=file -view-default # Region.cs-34 die offensichtlich niemals null zurückgibt! – Martin