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
{
}