2010-04-28 66 views
3

在C#中,可以执行以下操作:C#海量插入数据结构

List<int> registers = new List<int> { 1, 2, 3, 4 }; 

这将在列表中产生具有1,2,3和4的列表。假设我从一些函数给出一个列表,我想插入一串数字像下面这样:

List<int> register = somewhere(); 
register.Add(1); 
register.Add(2); 
register.Add(3); 
register.Add(4); 

是否有这样做像上面的代码片段的更清洁的方式?

+2

我很失望,我期望的东西*巨大*':P' – Kobi 2010-04-28 06:38:16

+0

是的,如果你使用集合初始值设定项对真正大规模的插入进行硬编码,那就是TDWTF材质。 – 2010-04-28 06:40:37

回答

4

假设新项目都以某种形式枚举已中,AddRange()方法允许你添加他们都一气呵成:

var toBeAdded = new int[] { 1,2,3,4 }; 
register.AddRange(toBeAdded); 
+0

+1击败了我。 – ChrisBD 2010-04-28 06:32:04

2

你的意思是这样的吗?

List<int> register = somewhere(); 
register.AddRange(new List<int> { 1, 2, 3, 4 }); 
+1

请注意,尽管您的示例在语法上更清晰,但它不会提供任何性能优势,因为集合初始化程序仍然会逐个添加项目。 – 2010-04-28 06:25:10

+1

要添加到DrJokepu的评论:具体问题是,当调用Add多次(什么集合初始化是语法糖)将不断调整内部数组不止一次,如果你碰巧有足够的元素(可能30+),AddRange *即使在这些情况下,可能*只执行一次调整。如果您使用数组初始值设定项,则不会有任何大小调整。 – 2010-04-28 06:36:30

0

我认为你可以得到最干净的是这样的:

List<int> register = somewhere(); 
register.AddRange(new[] { 1, 2, 3, 4 }); 

但是,它可能并不总是能够隐式类型的数组。