C# 泛型-当T被约束为接口时,不能进行隐式转换,但当T为抽象类时,可以进行隐式转换

C# 泛型-当T被约束为接口时,不能进行隐式转换,但当T为抽象类时,可以进行隐式转换,c#,C#,在下面的代码中,当T:Entity时,编译器很高兴 当T:Entity时,我得到一个“无法隐式转换错误” 我不明白为什么 public abstract class BaseImplementation<T>: ISomeInterface<T> where T: Entity { public abstract T[] GetEntities(); IEntity[] ISomeInterface.GetEntities() {

在下面的代码中,当T:Entity时,编译器很高兴

当T:Entity时,我得到一个“无法隐式转换错误”

我不明白为什么

public abstract class BaseImplementation<T>: ISomeInterface<T> where T: Entity
{
    public abstract T[] GetEntities();

    IEntity[] ISomeInterface.GetEntities()
    {
        return GetEntities();
    }
}
公共抽象类BaseImplementation:ISomeInterface其中T:Entity
{
公共摘要T[]GetEntities();
IEntity[]ISomeInterface.GetEntities()
{
返回GetEntities();
}
}
试试:

where T : class, IEntity
数组的协方差仅适用于引用类型。例如:

对于任何两种引用类型A和B,如果从A到B存在隐式引用转换(第6.1.4节)或显式引用转换(第6.2.3节),则从阵列类型A[R]到阵列类型B[R]也存在相同的引用转换

举个例子:

public class Entity : IEntity { }
public struct StructEntity : IEntity { }
然后:

IEntity[] ent1 = new Entity[5];
IEntity[] ent2 = new StructEntity[5];
第二行给出了一个编译错误