为啥将
using System;
namespace A
{
class MainClass
{
public static void Main(string[] args)
{
    int []arry = new int[]{1,2,3,4,5,6,7,8,9};//???
    foreach(int i in arry)
    {  
        Console.Write(arry [i] + "\n");
    }
}
}
}
中的//???所在的那行该为:int []arry = new int[]{0,1,2,3,4,5,6,7,8,9};就不会产生数组越界异常了呢?

解决方案 »

  1.   

    因为,arry是的索引是从0开始算的arry[9]实际取的是第十个数,自然越界了
      

  2.   

    arry共9个元素。所以索引是arry[0]-arry[8]范围。9就越界了。
    这样你就理解了int[] arr=new arr[]{66,500,2222};
    foreach(int i in arr)
    {
      Console.write(arr[i]+"\n");
    }上来就越界了,因为第一次i就是66,那么arr[66]肯定是没有的。
      

  3.   

    int []arry = new int[]{0,1,2,3,4,5,6,7,8,9}
    里面的10个元素全部输出。。没有异常~
      

  4.   

    这里i是arry里面的元素,最大值为9,而arry的索引是0~8,
    自然就越界了
      

  5.   

    直接
        foreach(int i in arry) 
        {   
            Console.Write(i + "\n"); 
        } 
    不就好了..干嘛要arry[i];
    自寻烦恼嘛....i是arry里的数据啊
      

  6.   


    using System; 
    namespace A 

    class MainClass 

    public static void Main(string[] args) 

        int []arry = new int[]{1,2,3,4,5,6,7,8,9};
        foreach(int i in arry)
        {   
            Console.Write(arry [i] + "\n");//输出时为什么不直接使用 i 而使用 arry[i] 呢?这里的i是数组元素不是索引!
        } 


    } int i in arry 表示对数组 arry 进行列举
    i 在这里代表的是列举的数组元素(1,2,3,4,5,6,7,8,9}的任意一个
    它并不代表数组的索引
    数组元素和数组索引所代表的意义完全不一样
    不能将数组元素带入到数组索引中使用
    如 arry[i] 是不正确的
    这里出现这个“有意思”的结果是因为数组元素和数组索引正好都是整型 int如果是下面这种情况呢?using System; 
    namespace A 

    class MainClass 

    public static void Main(string[] args) 

        string[] arry = new string[]{"1","2","3","4","5","6","7","8","9"};
        foreach(string i in arry)
        {   
            Console.Write(arry [i] + "\n"); //这下子可就不能再张冠李戴了吧
        } 


      

  7.   

    foreach(int i in arry)
        {   
            Console.Write(+ "\n");
        } 
      

  8.   

    楼主是从VB转过来的吧,我当初从BASIC转C也很不习惯,现在觉得还是从0开始索引好。