C# 没有从“引用”的隐式引用转换;派生类型“;至;“基本类型”;仿制药

C# 没有从“引用”的隐式引用转换;派生类型“;至;“基本类型”;仿制药,c#,generics,C#,Generics,这是密码 public interface IEntity<T> { T Id { get; set; } } public abstract class Entity<T> : IEntity<T> { public T Id { get; set; } } public class Country : Entity<int> { ... }

这是密码

 public interface IEntity<T>  
   {
       T Id { get; set; }
   }


public abstract class Entity<T> : IEntity<T>       
    {
        public T Id { get; set; }
    }

 public class Country : Entity<int>
    {
...
    }

 public interface IRepository<T> where T : Entity<Type>
    {
    }

 public abstract class Repository<T> : IRepository<T>
       where T : Entity<Type>
    {
    }

 public class CountryRepository : Repository<Country>
{
}
公共接口的可扩展性
{
T Id{get;set;}
}
公共抽象类实体:通用性
{
公共T Id{get;set;}
}
公共类国家:实体
{
...
}
公共接口i假设,其中T:实体
{
}
公共抽象类存储库:IRepository
其中T:实体
{
}
公共类存储库:存储库
{
}
我遇到以下错误:

类型“Model.Country”不能用作泛型类型或方法“Repository”中的类型参数“T”。没有从“国家”到“实体”的隐式引用转换

如何将派生类型作为泛型参数映射到基类型

编辑:

我在这里通过创建一个基类并使用它得到了我的解决方案


主持人可以删除此问题

您违反了一般约束:

public abstract class Repository<T> : IRepository<T>
   where T : Entity<Type> // <= here
公共抽象类存储库:IRepository

其中T:Entity/您违反了通用约束:

public abstract class Repository<T> : IRepository<T>
   where T : Entity<Type> // <= here
公共抽象类存储库:IRepository

其中T:Entity/
Type
是一个框架类。使用另一个名字。你的标题有误导性。@Rawling什么是误导性的…这就是我得到的错误。为什么要投反对票?任何原因?因为
国家
不是从
实体
派生的,所以它是从
实体
派生的
类型
是一个框架类。使用另一个名字。你的标题有误导性。@Rawling什么是误导性的…这就是我得到的错误。为什么要投反对票?有什么原因吗?因为
国家
不是从
实体
派生的,它是从
实体
派生的。应该有什么?我应该能够传递任何数据类型int、short、long等。我尝试使用实体,但得到了相同的错误。@WebWorld:即使您已经自己发现了,我也将其添加到我的答案中,供其他人查看。如果你不是这样做的,也许用你的解决方案“自我回答”这个问题……应该有什么?我应该能够传递任何数据类型int、short、long等。我尝试使用实体,但得到了相同的错误。@WebWorld:即使您已经自己发现了,我也将其添加到我的答案中,供其他人查看。如果你不是这样做的,也许用你的解决方案“自我回答”这个问题。。。
public abstract class Entity { }
public abstract class Entity<T> : Entity, IEntity<T>       
{
    public T Id { get; set; }
}
public abstract class Repository<T> : IRepository<T>
   where T : Entity
{
}