C#System.IndexOutOfRangeException或者无法转换为Long

时间:2017-08-15 16:26:37

标签: c#

我有点这样的错误:

  

" System.IndexOutOfRangeException:索引超出了数组"

当我将int=1更改为long=1时,它表示无法将long转换为int

我试图将N的所有输出保存到数组中,并在结尾显示保存到数组中的内容。

static void Main(string[] args)
{
    int a = 0;
    a = Convert.ToInt64(Console.ReadLine());

    int[] array = new int[a];

    if (a == 0)
    {
        Console.WriteLine("Falsche eingabe.");
    }
    else
    {
        long n = 1;
        for (int i = 1; i <= array.Length; i++)
        {
            n *= i;
            array[i] = n;

            Console.WriteLine("N: " + i + " Fakultät von N: " + array[i]);
        }
    }
    Console.ReadKey();
}

1 个答案:

答案 0 :(得分:1)

  • 数组的索引从0开始,而不是从1开始。因此,在for循环i <= array.Length中,i等于您输入的长度,并尝试array[array.Length]抛出异常。改为:

    for (int i = 0; i < array.Length; i++)
    

    原因索引为零基于语言基于C,其中数组是指向为数组分配的位置的指针:

    int *arrayPointer;
    

    然后要通过数组,需要转到arrayPointer + sizeof(int)*i。因此,对于数组的第一个位置i应该从零开始

  • 此外这行不编译:

    a = Convert.ToInt64(Console.ReadLine());
    
    当您转换为a时,

    int的类型为long。使用ToInt32