问题描述
我有以下代码,通过粘贴的代码创建一个名为“ Lines”的字符串数组,并将“ Lines”字符串中的每个数组的项目添加到listBox中。
string Temp = Clipboard.GetText();
int count = 1;
for (int i = 0; i < Temp.Length; i++)
{
if (Temp[i] == '\n') count++;
}
string[] lines = Temp.Split(
new[] { Environment.NewLine },StringSplitOptions.None
);
int reader = 1;
int repeat = count;
for (int i = 0; i < repeat; i++)
{
ListBox.Items.Add(lines[reader]);
reader = reader + 1;
}
在Visual Studio中使用此代码时,一切似乎都很好,
但是当我运行此代码时,出现以下错误:
System.IndexOutOfRangeException;
这意味着数组索引超出范围。当我更换
ListBox.Items.Add(lines[reader]);
使用
ListBox.Items.Add(lines[1]);
例如,它工作正常。这意味着问题来自“读者” int,但我似乎找不到解决此问题的方法。
我该如何解决?
解决方法
问题可能是您在1
处开始您的计数器变量,然后将其用作数组的索引,但是在c#中数组是从零开始的,因此您实际上是在跳过第一个项目0
,然后尝试访问超出数组范围的项目。
计算\n
个字符并期望它等于Environment.NewLine
个实例的数量也是不准确的。
似乎您还有很多不必要的变量可以跟踪计数。相反,您的代码可以简化为:
string temp = Clipboard.GetText();
string[] lines = temp.Split(new[] {Environment.NewLine},StringSplitOptions.None);
for (int i = 0; i < lines.Length; i++)
{
ListBox.Items.Add(lines[i]);
}
或者,您可以只一行完成所有操作:
ListBox.Items.AddRange(
Clipboard.GetText().Split(new[] {Environment.NewLine},StringSplitOptions.None));