泛型中没有从“导出类型”到“基类型”的隐式引用转换

时间:2014-07-22 07:41:23

标签: 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 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

主持人可以删除此问题

1 个答案:

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