Mam następujący kod w mojej aplikacji .NET 4:Dlaczego nie jest sprawdzane połączenie oparte na ciągach znaków Contract.Ensure?
static void Main(string[] args) {
Func();
}
static string S = "1";
static void Func() {
Contract.Ensures(S != Contract.OldValue(S));
S = S + "1";
}
Ten Givens mi zapewnia niesprawdzone ostrzeżenie przy kompilacji:
warning : CodeContracts: ensures unproven: S != Contract.OldValue(S)
Co się dzieje? Działa to dobrze, jeśli S jest liczbą całkowitą. Działa to również, jeśli zmienię opcję Zapewnienie na S == Contract.OldValue(S + "1")
, ale nie jest to tym, co chcę zrobić.