3

为什么以下代码会出现错误?

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

public interface IFoo {}
public interface IBar<T> where T : IFoo {}

public interface IItem<out T> where T: IFoo
{
    IEnumerable<IBar<T>> GetList();
}
4

2 回答 2

9

接口IBar并不IItem同意方差:在您的IBar声明中, T 不是协变的,因为没有out关键字,而在IITemT 中是协变的。

于 2012-09-18T20:18:47.803 回答
0

以下代码将摆脱错误。

public interface IFoo {}
public interface IBar<out T> where T : IFoo {}

public interface IItem<out T> where T: IFoo
{
    IEnumerable<IBar<T>> GetList();
}
于 2012-09-18T20:24:15.373 回答