数组上的IndexOutOfRangeException

时间:2018-06-29 07:53:26

标签: c# arrays

int[] arr=new int[10]{1,21,32,43,54,65,76,87,98,10};

foreach(var i in arr)
{
   Console.WriteLine("Elements [{0}]:{1}",arr[i],i);              
}

我想要类似

的输出
element[0]: 1
element[1]: 21
...
element[9]: 10 

仅使用foreach,但出现此错误:

  

未处理的异常:System.IndexOutOfRangeException:索引为   在数组范围之外。在Exercise1.Main()<0x41e47d70 +   0x0008c>,其中:0 [错误]致命异常:   System.IndexOutOfRangeException:索引超出了   数组。在Exercise1.Main()<0x41e47d70 + 0x0008c>在:0

3 个答案:

答案 0 :(得分:5)

i不是索引,而是元素本身。在循环的第二次迭代中,您尝试访问不存在的索引21 Console.WriteLine("Elements [{0}]:{1}",arr[21],21)

更改为for循环

int[] arr = new int[10] { 1, 21, 32, 43, 54, 65, 76, 87, 98, 10 };

for (int i =0;i< arr.Length;i++)
{
    Console.WriteLine("Elements [{0}]:{1}",i ,arr[i]);
}

答案 1 :(得分:1)

尝试这样:

int j =0;
foreach(var i in arr)
{
   Console.WriteLine("Elements [{0}]:{1}",j,i); 
   j++;             
}

答案 2 :(得分:0)

foreach关键字不返回元素的“索引”。它返回元素。

int[] arr = new int[] {1,21,32,43,54,65,76,87,98,10};

foreach (var el in arr)
{
   Console.WriteLine("Element {0}", el);
}

在C#中(与go不同),没有直接构造返回i索引以及元素arr[i]。您可以拥有一个(i使用for周期,然后从那里获得arr[i])或另一个(使用foreach

使用string数组比较您写的内容以查看其不合逻辑:

string[] arr = new string[] {"1","21","32","43","54","65","76","87","98","10"};

foreach (var el in arr)
{
   Console.WriteLine("Element {0}", el);
}