这是代码
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>
{
}
我收到以下错误:
类型&#39; Model.Country&#39;不能用作类型参数&#39; T&#39;在通用类型或方法&#39;存储库&#39;。来自&#39;国家/地区&#39;没有隐式参考转换。到&#39;实体&lt; System.Type&gt;&#39;。
如何将派生类型映射到基类型作为通用参数?
修改
我通过再创建一个基类并使用它来获得我的解决方案。
http://msdn.microsoft.com/en-us/library/aa479858.aspx
主持人可以删除此问题
答案 0 :(得分:3)
您违反了通用约束:
public abstract class Repository<T> : IRepository<T>
where T : Entity<Type> // <= here
和
public class Country : Entity<int>
Entity<int>
不是Entity<Type>
。
如果你想允许“任何类型”,你可以通过一个共同的基类来做到这一点:
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
{
}