无效方差:类型参数'T'必须在 'xxx.IItem 上始终有效<T>。GetList()'. 'T'是协变的



为什么下面的代码得到错误?

无效方差:类型参数"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();
}

接口IBarIItem在方差上不一致:在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();
}

相关内容

  • 没有找到相关文章

最新更新