2011-11-03 43 views
1

所以,我有一個繼承的界面如下如何傳遞一個List <T>到類型的另一個列表是t實現

public interface IRefDataItem 
{ 
    int RefID { get; set; } 
string Code { get; set; } 
} 

public class RACodeItem : IRefDataItem 
{ 
    public int RefID { get; set; } 
    public string Code { get; set; } 
} 

然後我返回RACodeItem列表的方法的基本類我在嘗試分配到IRefDataItem的名單如下

List<IRefDataItem> codes = GetRACodes(); //GetRACodes returns List of RACodeItem 

我得到一個錯誤,在這裏,說明RACodeItem的不能隱式轉換類型列表列出IRefDataItem的,儘管RACodeItem繼承IRefDataItem

事實

我在這裏錯過了一些簡單的東西嗎?我如何將T列表轉換爲T實現的接口類型的列表?

乾杯

斯圖爾特

+0

什麼版本的.NET您使用的是? – Oded

+1

函數「GetRACodes();」的簽名是什麼? –

+0

3.5。簽名是無關緊要的,唯一重要的是它返回的列表類型。下面的答案基本上爲我解答問題並解釋它爲什麼不起作用 –

回答

5

我明白爲什麼你想這一點,但如果你仔細想想,你會發現這是行不通的。

例如(此代碼不能編譯)

public interface ITest 
{ 
} 

public class Test1 : ITest 
{ 
} 

public class Test2 : ITest 
{ } 


static void Main(string[] args) 
{ 
    List<ITest> list = new List<Test1>(); 

    list.Add(new Test1()); 
    list.Add(new Test2()); 

} 

問題是你不能添加到的Test2 Test1的的名單。聲明你列表爲List<ITest> list = new List<ITest>();將編譯,你可以添加Test1和Test2。

+3

好點,但請注意,它適用於IEnuemrable ,它是協變的(因爲它沒有添加方法) – FuleSnabel

相關問題