我想为系统中的实体定义一个通用基类,公开实体的标识符类型(例如int,Guid等)
class Entity<TId>
{
}
class Product : Entity<int>
{
}
然后我可以定义一个通用存储库接口来检索由id键入的实体字典。
interface IRepository<TEntity, TId> where TEntity : Entity<TId>
{
Dictionary<TId, TEntity> Get();
}
为了使用这个通用接口,我必须提供两个类型参数:
IRepository<Product, int> productRepository;
然而,这感觉多余。在接口定义中给定类型约束时,是否无法推断第二个类型参数?我希望能够写下:
IRepository<Product> productRepository;
编辑:显然,我在搜索方面表现不佳。与往常一样,在发布之后,我无法找到一个好的解释。
此问题被标记为重复,但我发现了我认为比链接副本更好的资源。
最完整的解释是Eric Lippert的博客文章:
更相关的SO问题:
另见: