All*_*est 4 .net c# code-contracts
我有这个代码:
public class CodeContractSample
{
private readonly List<object> _items = new List<object>();
public IEnumerable<object> Query()
{
Contract.Ensures(Contract.Result<IEnumerable<object>>() != null);
//if (_items == null) throw new Exception();
return _items;
}
}
Run Code Online (Sandbox Code Playgroud)
CodeContracts给出了这个警告:
CodeContracts:确保未经证实:Contract.Result>()!= null
如果我取消注释中间行,它就会停止抱怨.但为什么一开始就抱怨?_items永远不应该为null ..?
合同不是100%,它理解的内容仍然存在差距.
你是对的:结果没有理由得不到证实.有关此特定问题的详细信息,请参阅http://social.msdn.microsoft.com/Forums/en-US/codecontracts/thread/f82aa25c-e858-4809-bc21-0a08de260bf1.
目前,您可以使用以下方法解决此问题:
Contract.Assume(_items != null);
Run Code Online (Sandbox Code Playgroud)
您还可以使用契约不变量来实现此目的:
[ContractInvariantMethod]
void Invariants()
{
Contract.Invariant(_items != null);
}
Run Code Online (Sandbox Code Playgroud)