2012-09-18 47 views
1

爲什麼下面的代碼會得到錯誤?無效的差異:類型參數'T'必須在'xxx.Item <T> .GetList()'上不變。 'T'是協變的

無效方差:類型參數 '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(); 
} 
+0

你爲什麼把'IItem'標記爲協變('out T')? – Bartosz

+0

@Bartosz代碼的其他部分需要協變 – ca9163d9

回答

5

的接口IBarIItem不方差同意:在您的IBar報關,T是不是協變的,因爲沒有out關鍵字,而在IITem的T是協變的。

1

下面的代碼將擺脫錯誤。

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

public interface IItem<out T> where T: IFoo 
{ 
    IEnumerable<IBar<T>> GetList(); 
} 
相關問題