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

C# 使用int选择器C读取字符串数组#,c#,arrays,string,winforms,int,C#,Arrays,String,Winforms,Int,我有下面的代码从粘贴的代码创建一个名为“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 },

我有下面的代码从粘贴的代码创建一个名为“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;
}

例如,它工作得很好。这意味着问题来自于“reader”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]);
}

您的
计数
读卡器
(以及扩展的
重复
)都从
1开始。索引从
0
开始。看起来你试图保持同步的变量太多了。在集合上循环时,只需使用循环中的
i
,即可对项目进行索引<代码>计数
读卡器
,和
重复
在这里似乎都是完全不必要的。你到底想用这些代码实现什么?是否要将剪贴板中的文本拆分为单独的行并添加到列表框中?
ListBox.Items.AddRange(Temp.Split(“\n”,StringSplitOptions.None))
?这就是我要做的。每次换行时,都应在列表框中添加一个新项。忽略导致问题本身出现问题的数据缺失。。。所显示的代码可能会失败-您以一种方式计算行数,而不是使用不同的分隔符拆分行,这可能会导致不同的行数。你为什么这么做很让人困惑。
ListBox.Items.Add(lines[1]); 
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));