2013-11-15 111 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])。