【发布时间】:2011-12-13 15:36:00
【问题描述】:
基本上,我有以下几点:
public class MyClass
{
public MyClass(ICollection<MyObject> coll)
{
Contract.Requires(coll != null);
Contract.Requires(Contract.ForAll(coll, obj => obj != null));
Contract.Requires(Contract.ForAll(coll, obj => (????)); //What goes here?
}
}
public class MyObject
{
public object PropA { get; set; }
public object PropB { get; set; }
}
要求是:
- 集合中的所有 PropA 项目都是唯一的(没有重复)
- 集合中的所有 PropB 项目都是唯一的(没有重复)
似乎无法弄清楚我的 Contract.ForAll(...) 声明在这里做什么。
奖励:如果我可以组合 Contract.ForAll(...) 语句而不破坏代码合同?
【问题讨论】:
-
乍一看,函数的输入应该是 ISet 而不是 ICollection,但也许过于简单化了...
-
AVee 说了什么。我通常不会在
Requires中编码这样的复杂先决条件。如果您使用的是静态检查器,则无法证明这一点。最好使用像 Set 这样对先决条件进行编码的类。
标签: c# linq collections code-contracts