9

我刚刚开始了解 VS2010 标配的代码契约库。我马上遇到的一件事是某些合同条款的真正含义。

例如,这两种说法有何不同?

Contract.Requires(!mycollection.Any(a => a.ID == newID));
Contract.Requires(!Contract.Exists(mycollection, a => a.ID == newID));

换句话说,Contract.Exists 在实际用途中做了什么,无论是对于使用我的函数的开发人员,还是对于静态代码分析系统?

4

2 回答 2

4

Contract.Exists由于其声明性质,首选使用的版本。另一个优点是框架知道这个合约,它更有可能在静态分析中被“抓住”。

于 2010-05-06T22:04:30.330 回答
1

好的,我找到了答案。根据代码合同用户手册,第 2.7.2 节:

“也可以使用扩展方法 System.Linq.Enumerable.Any 代替 Contract.Exists 。”

所以它们是等价的。我将使用 Any 而不是 Exists,因此它与我们的其余代码一致。

于 2010-05-07T16:41:05.783 回答