Tôi không chắc mình có đang làm gì sai ở đây hay không ...Hợp đồng mã: Đảm bảo Unproven & Yêu cầu Unproven
Tôi có lớp trình bao bọc từ điển tùy chỉnh và đây là đoạn trích của mã cần thiết.
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ý do duy nhất tôi thêm dòng cho ContainsKey là vì tôi nhận được thông báo cảnh báo sau (và vẫn làm): Codecontracts: ensures unproven: !Contract.Result<bool>() || @this.Count > 0
. Tôi có thể xóa dòng này và vẫn nhận được CÂU CHUYỆN CÙNG!
Tôi phải làm gì ở đây để loại bỏ những vấn đề này?
Cập nhật:
Tôi cũng đã cố gắng (như đề xuất) ...
public Boolean ContainsKey(TKey key)
{
Contract.Requires(Count == 0 || InternalDictionary.ContainsKey(key));
Contract.Ensures(!Contract.Result<bool>() || Count > 0);
return InternalDictionary.ContainsKey(key);
}
Cảnh báo 5 Phương pháp 'My.Collections.Generic.ReadOnlyDictionary
2.ContainsKey(type parameter.TKey)' implements interface method 'System.Collections.Generic.IDictionary
2.ContainsKey (loại parameter.TKey) ', do đó không thể thêm Yêu cầu.
Lưu ý rằng gốc của vấn đề của bạn là phương pháp này hứa hẹn rằng mọi khóa sẽ được tìm thấy và nó thực sự không kiểm soát được điều đó. –