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

5 .net c# generics code-contracts

所以,我这里有一点问题.

假设我有:

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

    // ...and so on...
}
Run Code Online (Sandbox Code Playgroud)

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

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

    // ...etc...
}
Run Code Online (Sandbox Code Playgroud)

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

[ContractClassFor(typeof(Repository<TEntity>))] // what is TEntity?! error!
Run Code Online (Sandbox Code Playgroud)

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

小智 5

原来这是这个问题的重复,有点.

typeof(Repository <>)语法似乎对我没有用,但事实证明,typeof(Repository <,>)可以解决问题,因为有两个类型参数.

结束问题,并在前一个问题上添加评论.