我正在研究一个将位图封装为像素数组的对象。该数组是一维的,我将图像的宽度存储在只读字段中。我还添加了一个基于像素数组长度和宽度计算高度的属性。我有以下关于高度的不变量:
- 像素数组(Data 属性,使用私有数据字段)不为空,并且至少有一个元素。
- 宽度大于零
高度属性的代码:
public int Height
{
[Pure]
get
{
Contract.Requires(Data != null);
Contract.Requires(Width > 0);
Contract.Requires(Data.Length > 0);
Contract.Ensures(Contract.Result<int>() > 0);
Contract.EndContractBlock();
Contract.Assume(Data.Length > Width);
return Data.Length / Width;
}
}
但我无法让静态检查器证明这一点。问题可能是(据我了解),没有要求Data.Length % Width == 0
,所以因为整数除法Data.Length / Width
可能为零;因此我添加了没有运气的假设。我不确定如何提示静态检查器接受我的保证。