假设我有这样的名单:
var firstList = new List<ofsometype>();
var secondList = new List<ofsomeanothertype>();
var thirdList = new List<anothertype>();
如何制作接受这些列表的列表?像
var mainList = new List<???>();
mainList.Add(firstlist);
mainList.Add(secondlist);
mainList.Add(thirdlist);
感谢。
答案 0 :(得分:5)
我可能会使用Dictionary集合:
var firstList = new List<ofsometype>();
var secondList = new List<ofsomeanothertype>();
var thirdlist = new List<anothertype>();
var listsDict = new Dictionary<Type, object>();
listsDict.Add(typeof(ofsometype), firstlist);
listsDict.Add(typeof(ofsomeanothertype), secondlist);
listsDict.Add(typeof(anothertype), thirdlist);
这里的优点是它可以为您提供有关列表类型的信息。这可以用于两件事:
List<object>
的类型
醇>
P.S。
根据解决方案的内容以及您需要实现的目标,您可以使用泛型(如果已知类型)或dynamic
s - 如果类型未知,但仍然是运行时的动态操作 - 如果编译器不知道类型,则需要时间。
答案 1 :(得分:2)
如果要从不同类型的列表中添加项目,则需要共享公共基类,或者从同一接口继承,例如
ofsometype : ISomeInterface
ofsomeanothertype: ISomeInterface
anothertype: ISomeInterface
var firstList = new List<ofsometype>();
var secondList = new List<ofsomeanothertype>();
var secondList = new List<anothertype>();
var mainList = new List<ISomeInterface>();
mainList.AddRange(firstlist);
mainList.AddRange(secondlist);
mainList.AddRange(thirdlist);
在从列表中检索项目时,您将被限制访问ISomeInterface公开的成员,除非您采用强制转换/反射。
这也可以通过将它们添加到List<object>
来实现,但这样您就无需了解列表中包含的内容。