【问题标题】:Adding an int array to a list without it only takes the last version of the array在没有它的情况下将 int 数组添加到列表中只需要最后一个版本的数组
【发布时间】:2017-09-16 02:12:59
【问题描述】:

这是我试图解决的问题的简化版本。我试图将int[] 添加到List,但它会使用上一次迭代中的数组更新List 中的所有数组。这是为什么?我该如何解决这个问题?例如,如果它只是 1 个int,这不是问题。

intArray = new int[9];

for (int i = 0; i < 9; i++)
{
    intArray[i] = i;
}

Test.Add(intArray);

for (int i = 0; i < 9; i++)
{
     intArray[i] = i * 2;
}

Test.Add(intArray);

foreach (var item in Test)
{
   for (int i = 0; i < 9; i++)
   {
       Console.WriteLine(item[i]);
   }
}

Console.ReadKey();
}

public static int[] intArray { get; set; }
public static List<int[]> Test = new List<int[]>();

【问题讨论】:

  • 您只创建了一个数组。您的列表包含对同一数组的大量引用。现在是了解引用类型的好时机 :) 例如,请参阅 jonskeet.uk/csharp/references.html
  • 在每个Add之后,通过重复这行intArray = new int[9];来实例化一个新数组

标签: c# arrays list int


【解决方案1】:

使用new 关键字您只创建一次intArray。那么只有一个参考。之后,您将intArray 引用添加到集合List 多次。

试试这个,

intArray = new int[9];

for (int i = 0; i < 9; i++)
{
     intArray[i] = i;
}

Test.Add(intArray);

intArray = new int[9]; // create new intArray here

for (int i = 0; i < 9; i++)
{
     intArray[i] = i * 2;
}

Test.Add(intArray);

【讨论】:

    【解决方案2】:

    在你将你的 intArray 对象添加到你的 arraylist 之后,只需创建另一个对象

    intArray = new int[length];

    希望它会起作用

    【讨论】:

      猜你喜欢
      • 2016-01-05
      • 2013-12-05
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2020-09-09
      • 1970-01-01
      相关资源
      最近更新 更多