C# 如何在没有空行的情况下将此复制行从RichTextBox重构为ArrayList

C# 如何在没有空行的情况下将此复制行从RichTextBox重构为ArrayList,c#,loops,arraylist,refactoring,richtextbox,C#,Loops,Arraylist,Refactoring,Richtextbox,我希望用户从程序界面添加带有复制和粘贴的代理地址,当按下按钮时,我希望将它们复制到arraylist并继续使用arraylist,但当行数较多时,需要相当长的时间。当我添加10000个代理并尝试该按钮时,它在等待了一段时间后给出了一个错误。如何快速将richtextbox中的项目添加到arraylist列表 我的代码: ArrayList plist = new ArrayList(); if (richTextBox1.Lines.Length > 0 && c

我希望用户从程序界面添加带有复制和粘贴的代理地址,当按下按钮时,我希望将它们复制到arraylist并继续使用arraylist,但当行数较多时,需要相当长的时间。当我添加10000个代理并尝试该按钮时,它在等待了一段时间后给出了一个错误。如何快速将richtextbox中的项目添加到arraylist列表

我的代码:

ArrayList plist = new ArrayList();
    
if (richTextBox1.Lines.Length > 0 && checkBox1.Checked == true)
                {
                    for (int i = 0; i < richTextBox1.Lines.Length; i++)
                    {
                        if (richTextBox1.Lines[i].ToString() != "")
                        {
                            plist.Add(richTextBox1.Lines[i].ToString());
                        }
                    }
                }
ArrayList plist=new ArrayList();
if(richTextBox1.Lines.Length>0&&checkBox1.Checked==true)
{
对于(int i=0;i
您只需在条件检查后将其写入一行即可:

if ( checkBox1.Checked && richTextBox1.Lines.Length > 0 )
  plist.AddRange(richTextBox1.Lines.Where(line => line != "").ToArray()); //or line.Trim() != ""

我不认为你会得到任何速度优化,除了不必要的
ToString
,但是代码现在短、干净、更健壮、更易于维护。

可能不是你的主要问题,但请注意,
ArrayList
已被弃用,应替换为
List
当我添加10000个代理并尝试该按钮时,等待一段时间后出现错误
该错误是什么?您在这里询问了一些问题,如果无法找出导致错误的原因,则无论您将项目添加到集合的速度有多快都无关紧要。请注意,您可以一次添加所有项目,而不是单独添加。我这样说是因为调用
Add
时(在某些情况下),
ArrayList
List
的大小将加倍。不要每次都像那样使用
Add
来增加大小,而是使用
AddRange
并执行一次。一个简单的基准也有助于确认性能。这合适吗<代码>plist.AddRange(richTextBox1.Lines.Where(line=>line!='').ToArray()
line.Trim()!=“
@OlivierRogier这对我很有效。非常感谢。