2011-09-14 59 views
2

可能重複:
In C#, why can't a List<string> object be stored in a List<object> variable泛型列表清單<T>

我想這可能是工作:

private List<DateTime> _dateTimes = new List<DateTime>(); 
private List<String> _strings = new List<String>(); 

private List<List<Object>> _listOfLists = new List<List<Object>>(); 

_listOfLists.Add(_dateTimes); 
_listOfLists.Add(_strings); 

但是,我得到一個編譯器錯誤,指出。添加方法有一些無效的參數...有人看到爲什麼嗎?而且,有什麼可以成爲一個通用的列表清單的解決方案?

+0

和兩個電話中的哪一個呼叫.Add你得到錯誤? :d –

回答

5

問題是,由於與類型安全相關的原因,您不能將List<string>視爲List<object>。如果你能,這將是可能的:

var list = (List<object>)(new List<string>()); 
list.Add((object)42); // this should never be allowed to compile 

什麼你可以做的是:

private List<DateTime> _dateTimes = new List<DateTime>(); 
private List<String> _strings = new List<String>(); 

private List<IList> _listOfLists = new List<IList>(); 

_listOfLists.Add(_dateTimes); 
_listOfLists.Add(_strings); 

這工作,因爲List<T>實現IList。當然,你現在已經通過喪失編譯時安全性來「強制」編譯代碼。實質上,您接受如果您嘗試將不正確類型的對象添加到IList實例之一中,您將獲得運行時異常。

0

A List<string>是否List<object>。如果是這種情況,您可以在運行時將List<string>投射到List<object>,然後使用string以外的其他類型調用Add方法。這會破壞列表的狀態。