为什么下面的代码得到错误?
无效方差:类型参数"T"必须始终有效 'UserQuery.IItem
.GetList()'."T"是协变。
public interface IFoo {}
public interface IBar<T> where T : IFoo {}
public interface IItem<out T> where T: IFoo
{
IEnumerable<IBar<T>> GetList();
}
接口IBar
和IItem
在方差上不一致:在IBar
声明中,T 不是协变的,因为没有out
关键字,而在IITem
中,T 是协变的。
以下代码将消除错误。
public interface IFoo {}
public interface IBar<out T> where T : IFoo {}
public interface IItem<out T> where T: IFoo
{
IEnumerable<IBar<T>> GetList();
}