有人理解为什么类的泛型约束与接口不同吗?此代码无法编译:
public interface IInterface
{
}
public class Class<T> where T : IInterface
{
public void Do()
{
IEnumerable<IInterface> ret = GetEnumerable();
}
public IEnumerable<T> GetEnumerable()
{
return new T[0];
}
}
Run Code Online (Sandbox Code Playgroud)
然而,通过将 IInterface 更改为类,突然可以编译
public class IInterface
{
}
public class Class<T> where T : IInterface
{
public void Do()
{
IEnumerable<IInterface> ret = GetEnumerable();
}
public IEnumerable<T> GetEnumerable()
{
return new T[0];
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用:
IEnumerable<IInterface> ret = (IEnumerable<IInterface>)GetEnumerable();
Run Code Online (Sandbox Code Playgroud)
但我真的很想知道如果 IInterface 是接口,为什么需要强制转换。