Code Contracts funktionieren gut, bis Sie ein bazillion Contract.Assume(...)
für die Ergebnisse aus dem Framework-Code hinzufügen müssen. Zum Beispiel gibt MemoryStream.ToArray()
niemals ein Null-Array zurück, so gut ich das anhand von Reflector sehen kann, aber es ist nicht als Vertrag dokumentiert, also muss ich Assume
überall angeben.
Gibt es eine magische Möglichkeit, eine Vertragsbibliothek für Funktionen zu erstellen, die bereits existieren? Ich schätze, dass, sobald Sie ein paar Dutzend der am häufigsten verwendeten Framework-Funktionen vergeben haben, die Warnungen viel schmackhafter werden würden.
Ich glaube nicht, dass Sie direkt können. Es gibt mehrere Dinge zu tun:
Fordern Sie den Vertrag in diesem Thread an > in den Code Contracts Foren.
Die vorgeschlagene Problemumgehung des Code Contracts-Teams besteht vorläufig darin, eine statische Methode zu erstellen, die alle erforderlichen Verträge übernimmt. Ich finde, dass dies am besten mit einer Erweiterungsmethode funktioniert:
%Vor% Auf diese Weise verwenden Sie s.ToArrayContracted()
anstelle von s.ToArray()
. Sobald die Verträge für den Typ verfügbar sind, können Sie einfach ToArrayContracted
bis ToArray
suchen und ersetzen.
Tags und Links c# code-contracts