使用 int 选择器 C# 读取字符串数组

Read string array with an int selector C#

我有以下代码从粘贴的代码创建一个名为“Lines”的字符串数组,并将“Lines”字符串中的每个数组添加一个项目到列表框中。

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]); 

例如,它工作正常。这意味着问题来自“reader”整数,但我似乎找不到解决它的方法。

我该如何解决这个问题?

问题很可能是您从 1 开始计数器变量,然后将其用作数组的索引,但数组在 c# 中是 zero-based,因此您实际上是在跳过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));