Non sono sicuro se sto facendo qualcosa di sbagliato qui o se ha bisogno di essere fissato ...codice dei contratti: Assicura Non dimostrata & Richiede Non dimostrata
Ho un dizionario personalizzato classe wrapper e qui è un frammento del codice che è necessario.
public int Count
{
get
{
Contract.Ensures(Contract.Result<int>() >= 0);
return InternalDictionary.Count;
}
}
public bool ContainsKey(TKey key)
{
//This contract was suggested by the warning message, if I remove it
//I still get the same warning...
Contract.Ensures(!Contract.Result<bool>() || Count > 0);
return InternalDictionary.ContainsKey(key);
}
L'unica ragione per cui ho aggiunto la linea per la ContainsKey è perché ho ottenuto il seguente messaggio di avviso (e continuo a farlo): Codecontracts: ensures unproven: !Contract.Result<bool>() || @this.Count > 0
. Posso rimuovere questa riga e ottenere ancora lo SAME ISSUE!
Cosa faccio qui per sbarazzarsi di questi problemi?
Aggiornamento:
Ho anche provato (come suggerito) ...
public Boolean ContainsKey(TKey key)
{
Contract.Requires(Count == 0 || InternalDictionary.ContainsKey(key));
Contract.Ensures(!Contract.Result<bool>() || Count > 0);
return InternalDictionary.ContainsKey(key);
}
Attenzione 5 Metodo 'My.Collections.Generic.ReadOnlyDictionary
2.ContainsKey(type parameter.TKey)' implements interface method 'System.Collections.Generic.IDictionary
2.ContainsKey (tipo parameter.TKey) ', quindi non può aggiungere Richiede.
Nota che la radice del tuo problema è che questo metodo è promettente che ogni chiave sarà trovata, e non ha alcun controllo su questo. –