【发布时间】:2011-07-24 08:37:33
【问题描述】:
我有这个代码:
public class MyCollection : ICollection<string>
{
private readonly ICollection<string> _inner = new Collection<string>();
public void Add(string item)
{
_inner.Add(item);
} // <-- CodeContracts: ensures unproven: this.Count >= Contract.OldValue(this.Count)
public void Clear()
{
_inner.Clear();
} // <-- CodeContracts: ensures unproven: this.Count == 0
public bool Contains(string item)
{
return _inner.Contains(item); // <-- CodeContracts: ensures unproven: !Contract.Result<bool>() || this.Count > 0
}
public void CopyTo(string[] array, int arrayIndex)
{
_inner.CopyTo(array, arrayIndex); // <-- CodeContracts: requires unproven: arrayIndex + this.Count <= array.Length
}
public IEnumerator<string> GetEnumerator()
{
return _inner.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public bool Remove(string item)
{
return _inner.Remove(item);
}
public int Count
{
get { return _inner.Count; }
}
public bool IsReadOnly
{
get { return _inner.IsReadOnly; }
}
}
我收到以下警告:
- 添加:CodeContracts:确保未经证实:
this.Count >= Contract.OldValue(this.Count) - 清除:CodeContracts:确保未经证实:
this.Count == 0 - 包含:CodeContracts:确保未经证实:
!Contract.Result<bool>() || this.Count > 0 - CopyTo:CodeContracts:需要未经证实:
arrayIndex + this.Count <= array.Length
如何解决这些问题?有什么方法可以抑制这些吗?
【问题讨论】:
-
你实现
Count返回_inner.Count了吗? -
我已经编辑了我的问题以包括整个班级。所以你可以看到
Count返回_inner.Count。 -
我无法重现警告。需要更多细节。请注意下面我帖子的编辑部分。试试它是否适合你。另外 this.Count >= Contract.OldValue(this.Count) 可能需要 _inner.Count >= Contract.OldValue(_inner.Count)。
-
您是否激活了代码合约?我已经在项目属性 > 代码合同中激活了它们。运行时检查、静态检查和合同参考组装:构建。
-
代码契约会告诉你哪一行违反了哪些契约吗?
标签: c# .net code-contracts icollection