C# 泛型-当T被约束为接口时,不能进行隐式转换,但当T为抽象类时,可以进行隐式转换
在下面的代码中,当T:Entity时,编译器很高兴 当T:Entity时,我得到一个“无法隐式转换错误” 我不明白为什么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() {
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];
第二行给出了一个编译错误