【问题标题】:"Index was outside the bounds of the array" in c#. Why? [closed]c# 中的“索引超出了数组的范围”。为什么? [关闭]
【发布时间】:2016-02-23 19:08:51
【问题描述】:

我的 for-each 循环中不断出现异常,我不明白为什么。

当我使array[i] 等于i 时,错误消失了,但是如果我希望它等于一个不同的值呢?

相关代码:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] array1 = new int[5];

            for (int i = 0; i < 5; i++)
            {
                array1[i] = (i + 1);
            }


            foreach (int value in array1)
            {
                Console.Write(array1[value]);
            }

            Console.ReadKey();

        }
    }
}

【问题讨论】:

  • 因为您将 5 放入 array1[4] 中,然后将其取出并尝试使用它访问 array1[5]。您只能从 0..4 开始索引
  • foreach 然后使用array[value] 是不正确的。在array1 上使用foreachvalue 将是数组中的每个元素。
  • 要么再次将foreach... 替换为for (i = 0; i &lt; 5; i++),要么将Console.Write(array[value]) 替换为Console.Write(value)

标签: c# arrays exception foreach


【解决方案1】:

您的 foreach 循环的问题是您使用 VALUE 作为数组索引,而不是简单地打印值。

将您的代码更改为:

Console.Write(value);

它应该可以工作。

【讨论】:

    【解决方案2】:
    foreach (**int** value in array1)
    {
        Console.Write(**array1[value]**);
    }
    

    改为这样做:

    foreach (var value in array1)
    {
        Console.Write(value);
    }
    

    【讨论】:

      【解决方案3】:

      您正在将 i+1 分配给数组元素值并尝试使用此值访问数组。

              int[] array1 = new int[5];
      
              for (int i = 0; i < 5; i++)
              {
                  array1[i] = (i + 1);
              }
      

      在上面的代码中

          array1[0]=1
          array1[1]=2
          array1[2]=3
          array1[3]=4
          array1[4]=5
      

      array1[4] 中的值为 5

      现在在 foreach 循环中,您正尝试访问位置 5 的数组,即 array1[5],这会引发索引超出范围异常

      【讨论】:

        【解决方案4】:

        在这一行中,您将使用 0 到 4 五个元素对数组进行标注:

        int[] array1 = new int[5]; // elements 0, 1, 2, 3, 4
        

        然后您在第一个“for”循环中循环五次,并将每个元素设置为等于索引加一:1、2、3、4、5。在下一个“for”循环中,您将尝试访问同一个数组的元素通过它们的值,但是当你到达最后一个元素时,它的值为 5,它会失败,因为没有索引 5。记住,只有索引 0 到 4。

        【讨论】:

        • 0 到 4,即 5 个元素。我有一种感觉,你知道这一点并犯了一个愚蠢的错误
        • @JoePhilllips -- 当然 :)
        猜你喜欢
        • 2021-11-04
        • 1970-01-01
        • 2015-11-06
        • 2010-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多