2013-11-15 109 views
0

我有这样的代码:指数是阵列的边界之外

String Oddelovac = textBox1.Text;          
string file = openFileDialog1.FileName; 
foreach (String line in File.ReadAllLines(file).Skip(radek)) 
{ 
    String[] columns = line.Split(Oddelovac.ToCharArray()); 
    Mnozstvi = columns[poradi_mnozstvi]; 
    Prod_cena = columns[poradi_ProdCena]; 
    Ean = columns[poradi_Ean]; 
    Cislo = columns[poradi_Cislo]; 
    Nazev = columns[poradi_Nazev]; 
    Dan = columns[poradi_Dan]; 
    ng_Doklad = columns[poradi_NG]; 
    o1 = columns[poradi_o1]; 
    o2 = columns[poradi_o2]; 
    zc = columns[poradi_ZC]; 
    u1 = columns[poradi_U1]; 
    Od = columns[poradi_Od]; 
    MJ = columns[poradi_MJ]; 
    datum_nahrani = System.DateTime.Now.ToShortDateString(); 
} 

我有这样的错误: index is outside the bounds of the array - 在浇铸ZC =列[poradi_ZC]; 的错误是在poradi_ZC,它有2个数字... 例子:

poradi_o1=8 
poradi_o2=9 
poradi_ZC=10 

你有什么想法?

+4

您的列数组中的列数少于11列 – Steve

+0

似乎'列'没有索引'10' - 请检查数组的长度。此外,用你的方法,你必须确保你的文件**中的每一行都会**分成所需数量的项目,否则你会更频繁地遇到这个异常...... –

回答

3

一个基本的“修复”是唯一试图得到一个值,如果你是从获取数组的长度足够长:

zc = (columns.Length > poradi_ZC) ? columns.[poradi_ZC] : string.Empty; 

...但你必须决定是否在你的情况下才有意义,或者如果其他事情是错误的。无论如何,这就是你错误的原因(列中包含的元素少于poradi_ZC + 1)。

(请记住,数组索引以0开头,所以第二个元素的搜索结果为columns[1],最后一个元素的结果为columns[nrOfItems - 1])。