2016-05-31 23 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(“;”,“,”);

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