Warum warnt mich CodeContracts, dass "unbewiesen: index @ this.Count" erforderlich ist, obwohl ich die Zählung bereits überprüft habe?

8

Ich habe Code, der ungefähr so ​​aussieht:

%Vor%

Sollte das Any Konto nicht auf Index 0 prüfen? Mache ich etwas falsch, oder erkennt CodeContracts diesen Fall einfach nicht?

    
Matthew Pirocchi 28.07.2011, 18:25
quelle

2 Antworten

6

LINQs .Any und der Objektaccessor [0] sind nicht ausreichend miteinander verknüpft, sodass Code Contracts nicht als identisch betrachtet werden können. Da this.bar sowieso mit einem Standardwert initialisiert werden würde, ist es wahrscheinlich am besten, dies einfach zu tun:

%Vor%

Dies würde nicht nur die Möglichkeit der Fadensicherheit lösen, auf die AakashM hinweist, sondern es ist auch etwas performanter. Da Sie wissen, dass this eine Sammlung ist (und daher .Count hat), wäre eine andere Option:

%Vor%     
StriplingWarrior 28.07.2011, 18:28
quelle
6

Keine der LINQ-Methoden ist mit der Contracts API annotiert. Wenn der Verifizierer mit dieser Methode ausgeführt wird, erhält er keine neuen Daten über den Wert von Count . Deshalb sehen Sie die Warnung.

Eine Möglichkeit, dies zu umgehen, ist die Verwendung von Assume , um dem Verifizierer mitzuteilen, dass die Zählung zu diesem Zeitpunkt gültig ist.

%Vor%     
JaredPar 28.07.2011 18:29
quelle

Tags und Links