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

インターフェイスIBarIItemは分散に同意しません。宣言では、キーワードIBarがないため、 T は共変ではありませんが、 T では共変です。outIITem

于 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 に答える