List <T>的通用列表

Ber*_* IT 2 c# generics list

可能重复:
在C#中,为什么List <string>对象不能存储在List <object>变量中

我认为这可行:

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);
Run Code Online (Sandbox Code Playgroud)

但是,我收到编译器错误,指出.Add方法有一些无效的参数......有人看到了原因吗?而且,具有通用列表列表的解决方案是什么?

Jon*_*Jon 5

问题是,由于与类型安全相关的原因,您不能将其List<string>视为一个List<object>.如果可以,这将是可能的:

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

可以做到这一点:

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);
Run Code Online (Sandbox Code Playgroud)

这有效,因为List<T>工具IList.当然,您现在已经通过丧失编译时类型安全性来"强制"编译代码.本质上,您接受如果您尝试向其中一个IList实例添加不正确类型的对象,您将获得运行时异常.