代码契约:ContractClassFor在处理泛型抽象类时?

时间:2010-10-17 09:32:56

标签: c# .net generics code-contracts

所以,我在这里遇到一些问题。

假设我有:

public class Repository<TEntity>
    where TEntity : class
{
    public abstract void Add(TEntity entity);

    // ...and so on...
}

现在我想定义一个契约类,如下所示:

public class RepositoryContracts<TEntity> : Repository<TEntity>
    where TEntity : class
{
    public void Add(TEntity entity)
    {
        Contract.Requires(entity != null);
    }

    // ...etc...
}

现在,我必须使用ContractClassAttribute和ContractClassForAttribute标记这些类。问题是,这不起作用:

[ContractClassFor(typeof(Repository<TEntity>))] // what is TEntity?! error!

因此,问题归结为:当这两个类是通用的时,如何将这两个类链接在一起?

1 个答案:

答案 0 :(得分:5)

原来这是this question的副本,有点。

typeof(Repository&lt;&gt;)语法对我来说似乎不起作用,但事实证明,typeof(Repository&lt;,&gt;)可以解决问题,因为有两种类型参数。

结束问题,并在the previous one添加评论。