c# - 列表的通用列表<T>

标签 c# list generics

Possible Duplicate:
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 方法有一些无效参数...有人明白为什么吗?并且,拥有通用列表列表的解决方案是什么?

最佳答案

问题是,由于与类型安全相关的原因,您不能处理 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 之一,您就接受了这一点。例如,您将收到运行时异常。

关于c# - 列表的通用列表<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7414780/

相关文章:

c# - 如何在词典集中查找项目?

c# - 为什么查询字符串参数包含两次 - asp.net boolean

python - 如果列表的元素指向相同的内存地址,那么两个列表如何不是引用同一个对象?

Python 列表追加

generics - Swift 中没有函数的数组

c# - 为什么引用类型在 C# 中不更新

c# - 从多个切片创建 Span

list - 应用窗口函数来获取递归列表,我该怎么办?

带参数和不带参数的 Java 泛型列表和 ArrayList

java - 初始化 Map 的类型安全可变参数方法