无法使我的阵列循环正确

时间:2016-02-26 14:47:50

标签: c# .net

我得到Index was outside the bounds of the array.

string[] paths = { 
                        "\\\\server\\c$\\folder\\subfolder\\user1\\300\\1\\abc.docx",
                        "\\\\server\\c$\\folder\\subfolder\\user2\\400\\1\\xyz.docx",
                    };

FileInfo[] f = new FileInfo[paths.Length];

for (int i = 0; i <= paths.Length; i++)
{
    f[i] = new FileInfo(paths[i]);
    Console.WriteLine(f[i].Length);
}

我似乎无法弄明白为什么,任何想法?

3 个答案:

答案 0 :(得分:4)

使用<代替<=

for (int i = 0; i < paths.Length; i++)
{
    f[i] = new FileInfo(paths[i]);
    Console.WriteLine(f[i].Length);
}

答案 1 :(得分:1)

数组从0开始计算itens。因此,如果你有一个长度为2的数组,你的对象将位于[0]和[1]位置。如果您尝试访问位置[2],您将得到索引超出数组异常的范围,因为此数组中不存在索引2。

在你的for循环中,你正在使用&lt; = paths.Length 。您的路径长度为2. 2小于或等于2,因此您的代码将按此执行

f[2] = new FileInfo(paths[2]) //Position 2 doesn't exist

要解决此问题,只需更改:

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

要:

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

答案 2 :(得分:0)

数组中有两个项目

paths[0], paths[1]

你的三个项目循环

paths[0], paths[1], paths[2]

要更正此问题,请更改

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

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