2016-05-31 21 views
-3

我有一個非常有趣的問題。IndexOutOfRange異常,即使它在範圍內WPF

String[] values = new String[3]; 
values = line.Split(';'); 
Console.Write("Val:" + values[0] + ", " + values[1] + ", " + values[2]); 

有人能告訴我,爲什麼我得到一個IndexOutOfRangeException當它在範圍內?

編輯: 該行有3個部門,例如1;2;3。 控制檯輸出Val: ...,但在輸出中,我仍然得到一個IndexOutOfRangeException

+0

您在發佈之前測試過嗎?「1; 2; 3」對於我來說可以正常工作 – Paparazzi

回答

-1

調試,我發現,我可能添加\ n \ n至該文件,以便從中可以讀出下一次它有下一個空字符串後數組行變量。沒有看到即將發佈:)感謝@Icepickle和@Dexter幫助:)

編輯:問題出在WriteLine方法。我在字符串末尾傳遞了一個「\ n」,所以可能當我讀取一行時,我得到一個空字符串(因爲兩行\ n在行末,WriteLine在默認情況下在\ n的末尾添加了一個\ n所以在結果中我有一個「測試;測試1;測試2 \ n \ n」

+0

您可能需要考慮[StringSplitOptions](https://msdn.microsoft.com/en-us/library/system.stringsplitoptions(v = vs.110).aspx),可以刪除空條目。也隨時張貼你做的回答自己並接受它! –

2

您正在拆分';'但你說值由分隔「:」(假設你沒有錯字)試試這個

String[] values = line.Split(':'); 
+0

對不起我在這裏做了一個類型,它們被分割爲「;」 –

5

因爲line.Split(';')覆蓋的new String[3]預先做出的分配。在本質上爲​​3210字符NR找到+ 1

如果您的線路是東西在這條線的字符串數組將是隻要:"this; is a test"values將是長度爲2的字符串數組,並values[2]就會出範圍

+0

是的,我同意,但文件中總是有3個值,比如「a; b; c」「1; 2; 3」,所以我應該能夠從第二個索引中讀取當我從值[0]讀取時,沒關係,當我讀取值[1]時,我在控制檯中看到該值,但之後我得到一個indexoutofrange錯誤 –

+0

您可以通過設置斷點來調試它'Console.Write'這一行,並調查行中的內容,以及'values'對象的值是什麼,或者你可以outp在你寫下你的價值觀之前先行,然後如果有錯誤發生,你就會知道爲什麼。最後一行可能不是空行,或者輸入文件中有錯誤? @DawidDaveKosiński – Icepickle

+0

調查完文件後,我認爲問題是「\ n」。例如:我的文件有2行:第一個「A; b; c」第二個「1; 2; 3」,行的值是「A; b; c」但在我的值[2]我看到「c1; 2; 3" 。非常奇怪:OI需要說文件是正確的:它有兩行:) –

0

我認爲這會做你在找什麼

Console.Write("Val:" + String.Join(", ", line.Split(';')); 

String.Join Method

甚至 精讀sole.Write(「Val:」+ line.Replace(「;」,「,」);

但我懷疑你需要一些其他的原因