我试图跟上代码合同的速度。这是另一个对我来说没有意义的问题:
这是不变量:
[ContractInvariantMethod]
void Invariant() {
Contract.Invariant(this._uiRoot.RowDefinitions!=null);
}
然后,在一个方法中是这样的代码:
int colunmn = 0;
foreach (UIElement uiElement in row.Where(element => element!=null))
{
if (uiElement != null)
{
uiElement.SetValue(Grid.ColumnProperty, colunmn++);
uiElement.SetValue(Grid.RowProperty, _uiRoot.RowDefinitions.Count - 1);
_uiRoot.Children.Add(uiElement);
}
}
然后我收到一个警告,即 _uiRoot.RowDefinitions 可能为空,尽管有不变量。我不明白为什么 CodeContracts 会认为,如果在每个公共方法调用和构造函数之后检查它。有问题的代码是一个自定义表单设计器,它在许多不同的方法中使用 uiRoot.RowDefinitions,这就是我想将它放入 Invariant 的原因。我认为这足以阻止它的警告。