Я не уверен, если я делаю что-то здесь не так, или если оно должно быть исправлено ...Код договора: Обеспечивает недоказанной и требует НЕПОДТВЕРЖДЕННОЕ
У меня есть пользовательский словарь класс-оболочку и вот фрагмент кода, который необходим.
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);
}
Единственная причина, я добавил строку для ContainsKey, потому что я получил следующее предупреждение (и до сих пор): Codecontracts: ensures unproven: !Contract.Result<bool>() || @this.Count > 0
. Я могу удалить эту строку и получить ТАКОЙ ВОПРОС!
Что мне делать, чтобы избавиться от этих проблем?
Update:
Я также попытался (как это было предложено) ...
public Boolean ContainsKey(TKey key)
{
Contract.Requires(Count == 0 || InternalDictionary.ContainsKey(key));
Contract.Ensures(!Contract.Result<bool>() || Count > 0);
return InternalDictionary.ContainsKey(key);
}
Предупреждение 5 Метод «My.Collections.Generic.ReadOnlyDictionary
2.ContainsKey(type parameter.TKey)' implements interface method 'System.Collections.Generic.IDictionary
2.ContainsKey (тип parameter.TKey) ', поэтому нельзя добавить Требуется.
Обратите внимание, что корень проблемы заключается в том, что этот метод обещает, что каждый ключ будет найден, и на самом деле он не имеет никакого контроля над этим. –