【问题标题】:System.ArgumentOutOfRangeException: 'Index was out of range. copy from one list to anotherSystem.ArgumentOutOfRangeException: '索引超出范围。从一个列表复制到另一个
【发布时间】:2019-10-05 09:58:19
【问题描述】:

我构建了以下程序,但出现超出范围错误。基本上我想将值从一个列表复制到另一个列表(从ab):

List<int> a = new List<int> { 99, 2, 3, 4, 5, 6 };
List<int> b = new List<int>(6);

for ( int i = 0; i < a.ToArray().Length; i++ )
{
  a[i].ToString().Insert(0, b[i].ToString());
}

for ( int i = 0; i < a.ToArray().Length; i++ )
{
  Console.WriteLine(b[i]);
}

Console.ReadKey();

【问题讨论】:

  • uzytkownik1 是空的...ToArray() 在这里没用。
  • 我更改了列表引用的名称以帮助眼睛看到错误:o)
  • 你不应该打电话给ToString(),因为你有一个List&lt;int&gt; 而不是List&lt;string&gt; - 删除两个ToString() 电话。您甚至不必编写此代码。只需使用b.AddRange(a);
  • 将您的第一个 a.ToArray().Length 更改为 a.Count。我怀疑将第二个更改为b.Count
  • 请不要破坏任何内容,包括您自己的内容。

标签: c# list debugging indexing indexoutofrangeexception


【解决方案1】:

只需通过在第一个列表上调用 ToList() 将值从第一个列表复制到第二个列表:

List<int> uzytkownik = new List<int>() { 99, 2, 3, 4, 5, 6 };

List<int> uzytkownik1 = uzytkownik.ToList();//only values are copied, not the reference to the first list

for (int i = 0; i < uzytkownik1.Count; i++)
{
    Console.WriteLine(uzytkownik1[i]);
}

Console.ReadKey();

如果你必须使用 for 循环,那么:

List<int> uzytkownik = new List<int>() { 99, 2, 3, 4, 5, 6 };

List<int> uzytkownik1 = new List<int>();

for (int i = 0; i < uzytkownik.Count; i++)
{
    uzytkownik1.Add(uzytkownik[i]);
}

for (int i = 0; i < uzytkownik1.Count; i++)
{
    Console.WriteLine(uzytkownik1[i]);
}

Console.ReadKey();

【讨论】:

    【解决方案2】:
    【解决方案3】:

    List&lt;T&gt; 已经有了处理这种工作的方法。 List&lt;T&gt;.AddRange(IEnumerable&lt;T&gt;)

    List<int> a = new List<int> { 99, 2, 3, 4, 5, 6 };
    List<int> b = new List<int>(6);
    
    b.AddRange( a );
    

    .net fiddle example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      • 2020-02-27
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      相关资源
      最近更新 更多