如何声明泛型类型的泛型约束

Hac*_*ese 9 c# generics constraints

我有两个通用的抽象类型:EntityAssociation.

让我们说Entity看起来像这样:

public class Entity<TId>
{ 
//...
}
Run Code Online (Sandbox Code Playgroud)

并且Association看起来是这样的:

public class Association<TEntity, TEntity2>
{
//...
}
Run Code Online (Sandbox Code Playgroud)

如何约束关联,以便它们可以属于任何实体?

我可以通过以下方式完成它:

public class Association<TEntity, TId, TEntity2, TId2>
     where TEntity : Entity<TId>
     where TEntity2: Entity<TId2>
{
//...
}
Run Code Online (Sandbox Code Playgroud)

随着更多类型的衍生Association,这变得非常繁琐,因为我必须继续传递TId和TId2.除了删除约束之外,还有更简单的方法吗?

Ada*_*son 11

通常通过让您的泛型类(Entity<TId>在本例中)继承自公共非泛型类来解决此问题.

public abstract class EntityBase
{

}

public class Entity<TId> : EntityBase
{

}
Run Code Online (Sandbox Code Playgroud)

这将允许您:

public class Association<TEntity, TEntity2>
    where TEntity : EntityBase
    where TEntity2 : EntityBase
{

}
Run Code Online (Sandbox Code Playgroud)

编辑

如果让它们从公共类继承是一个问题,那么这也可以通过接口轻松完成.