gpt4 book ai didi

c# - List 仅由 int[] 的最后内容填充

转载 作者:太空宇宙 更新时间:2023-11-03 12:17:19 24 4
gpt4 key购买 nike

我正在测试如何获取从一个函数返回的多个数据。我试图使用 int[] 的列表.为此,我有一个返回 List<int[]> 的函数。 ,如下图所示:

private List<int[]> Test()
{
List<int[]> testlist = new List<int[]>();
int[] record = new int[3];
record[0] = 1;
record[1] = 2;
record[2] = 3;
testlist.Add(record);
record[0] = 11;
record[1] = 12;
record[2] = 13;
testlist.Add(record);
return testlist;
}

当我检查列表的内容时,我看到它包含 2 条记录,但它们都包含 int[] 的最后一条记录。 .这意味着代替

list[0] = {1,2,3}
list[1] = {11,12,13}

我明白了

list[0] = {11,12,13}
list[1] = {11,12,13}

我想知道为什么会这样。

最佳答案

问题是您只有一个 int[] record 实例,您将它两次放入列表中。数组是 reference type .文档指出:

With reference types, two variables can reference the same object; therefore, operations on one variable can affect the object referenced by the other variable.

在第二次运行中,您覆盖了第一次的值,因为 record 仍然引用同一个对象。这就是为什么您在两个数组中具有相同值的原因。

要解决它,您需要为列表中的每个条目创建一个全新的实例:

 private List<int[]> Test()
{
List<int[]> testlist = new List<int[]>();
int[] record = new int[3];
record[0] = 1;
record[1] = 2;
record[2] = 3;
testlist.Add(record);

int[] record2 = new int[3];
record2[0] = 11;
record2[1] = 12;
record2[2] = 13;
testlist.Add(record2);
return testlist;
}

有关引用和值类型的更多信息,请阅读 this article

关于c# - List<int[]> 仅由 int[] 的最后内容填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49149535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com