我遇到了多个似乎是一种模式的案例:
Contract.Ensures(Contract.Result<BlahType>() != null);
...
BlahType Blah = new BlahType();
...
...
return Blah;
它抱怨。
在所有情况下,该字段都是私有的,并且该方法中的其他任何内容都不会与它混淆。(这些都是惰性初始化,因为数据必须来自磁盘。)
当然我可以在这里添加一个 Contract.Assume 但我不喜欢那种答案。
我遇到了多个似乎是一种模式的案例:
Contract.Ensures(Contract.Result<BlahType>() != null);
...
BlahType Blah = new BlahType();
...
...
return Blah;
它抱怨。
在所有情况下,该字段都是私有的,并且该方法中的其他任何内容都不会与它混淆。(这些都是惰性初始化,因为数据必须来自磁盘。)
当然我可以在这里添加一个 Contract.Assume 但我不喜欢那种答案。
让静态检查器相信字段永远不会null
(或任何其他条件)的唯一方法是使其成为不变量。不变量方法中的不变量在您的类中每个方法的返回时被检查,因此检查器可能假设它们成立。因此,添加到类的底部:
#region Invariants
[ContractInvariantMethod]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance",
"CA1822:MarkMembersAsStatic",
Justification = "Required for code contracts.")]
private void ObjectInvariant()
{
Contract.Invariant(this.blah != null);
}
#endregion
笔记:
private void
没有参数但ContractInvariantMethod
应用了属性的方法。您可以在其中放置多个不变量。ObjectInvariant
方法片段,请键入cim
TABTAB。