如何用另一个List<int>的内容替换一个List<int>的内容?

4

我使用了两个可空的int[]:

int?[] OriginalPterodactylVals = new int?[NUMBER_OF_BABES_IN_TOYLAND];
int?[] ChangedPterodactylVals = new int?[NUMBER_OF_BABES_IN_TOYLAND];

...并使用此代码将它们同步:

ChangedPterodactylVals.CopyTo(OriginalPterodactylVals, 0);

...但现在我已经将int[]转换成了List,但还没有找到或弄清楚如何完成相同的操作。

当一个列表“复制并粘贴”到另一个列表时,它们都将具有相同数量的值。

3个回答

9

您可以通过从现有列表构建新列表来执行浅复制:

list2 = new List<int>(list1);

注意,这将创建一个新的列表,而不是修改原来引用的list2列表(如果有的话)。
下面是一种使用AddRange修改现有列表的方法:
list2.Clear();
list2.AddRange(list1);

这里还有一种使用 for 循环的方法。但是需要保证列表长度相同,不过你在问题中已经说明了长度相同。

for (int i = 0; i < list1.Count; ++i)
{
    list2[i] = list1[i];
}

2

你尝试过以下方法吗:

OriginalPterodactylVals.Clear();
ChangedPterodactylVals.ForEach(val => { OriginalPterodactylVal.Add(val); });

构造函数 List<T>(IEnumerable<T>) 达到类似的目的,但它创建一个新的列表而不是清除和重新填充原始列表。只有在已经存在对原始列表的引用时才会有区别。 - Eric J.
只是指出相似之处和不同之处。如果某个东西已经引用了OriginalPterodactylVals,而希望指向的列表进行更新,那么您的解决方案就是正确的。 - Eric J.
我将这个标记为答案,但要挑剔的是,“foreach”需要写成“ForEach”,“.add”需要写成“.Add”。 - B. Clay Shannon-B. Crow Raven
是的 - 对不起,我有点在不同的编程语言和框架之间跳来跳去。 - web_bod

2
如果您想从现有的List初始化一个新的List,
List<int> a;
List<int> b = new List<int>(a);

那种方法利用了接受 IEnumerable<T>List<T> 构造函数。

请注意,使用该构造函数,您也可以从数组初始化列表。

参考链接:http://msdn.microsoft.com/en-us/library/fkbw11z0.aspx
int[] a = new int[42];
List<int> b = new List<int>(a);

好的,但这些是现有的列表;我不想创建一个新的...这样可以吗: OriginalPterodactylVals = ChangedPterodactylVals? - B. Clay Shannon-B. Crow Raven
这将把引用ChangedPterodactylVals分配给变量OriginalPterodactylVals,创建一个别名。两个变量都将指向同一个列表。更改一个列表,两个变量所指向的内容都会发生变化。 - Eric J.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接