可能重复:
In C#, why can't a List<string> object be stored in a List<object> variable
我认为这可行:
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);
但是,我收到一个编译错误,指出.Add方法有一些无效的参数......有人看到了原因吗?而且,有一个通用的列表列表可以解决什么问题?
答案 0 :(得分: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
实例添加不正确类型的对象,您将获得运行时异常。
答案 1 :(得分:0)
List<string>
不是List<object>
。如果是这种情况,您可以在运行时将List<string>
强制转换为List<object>
,然后使用Add
以外的类型调用string
方法。这会破坏列表的状态。