0
我想盡快熟悉Code Contracts。這裏是另一個問題是沒有意義對我說:爲什麼CodeContract有關空引用的警告,當ObjectInvariant檢查爲空時
這是不變的:
[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可能爲null。我不明白爲什麼CodeContracts會認爲如果在每個公共方法調用和構造函數之後檢查它。有問題的代碼是一個自定義的表單設計器,它在許多不同的方法中使用uiRoot.RowDefinitions,這就是爲什麼我想將它放入Invariant中的原因。我認爲這足以阻止它的警告。
只是一個猜測,但也許爲'_uiRoot!= null'做一個單獨的不變量 –