如何修复索引异常

本文关键字:异常 索引 何修复 | 更新日期: 2023-09-27 18:36:24

private int numberofallmessages = 0;
        private int countMsg = 0;
        private List<string> seenids = new List<string>();
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
                OpenPop.Pop3.Pop3Client PopClient = new OpenPop.Pop3.Pop3Client();
                PopClient.Connect("mail", 110, false);
                PopClient.Authenticate("me", "mo",
                    OpenPop.Pop3.AuthenticationMethod.UsernameAndPassword);
                List<string> uids = PopClient.GetMessageUids();
                List<string> seenUids = new List<string>();
                int messageCount = 30;
                numberofallmessages = messageCount;
                allMessages = new List<OpenPop.Mime.Message>(messageCount);
                for (int i = messageCount - 1; i > -1; i--)
                {
                    if (backgroundWorker1.CancellationPending == true)
                    {
                        e.Cancel = true;
                        return;
                    }
                    string currentUidOnServer = uids[i];
                    if (!seenUids.Contains(currentUidOnServer))
                    {
                        allMessages.Add(PopClient.GetMessage(i));
                        SaveFullMessage(PopClient.GetMessage(i), i);
                        w = new StreamWriter(emailsIDSFile, true);
                        w.WriteLine((i + 1) + " = " + currentUidOnServer);
                        w.Close();
                        int nProgress = (messageCount - i + 1) * 100 / messageCount;
                        backgroundWorker1.ReportProgress(nProgress, PopClient.GetMessageCount().ToString() + "/" + i);
                    }
                }
                PopClient.Disconnect();
        }

例外情况如下:

allMessages.Add(PopClient.GetMessage(i));

当异常发生时,变量"i"为 0变量 allMessages List 为 29变量 messageCount 是 30

消息数字参数的值不能为零或更小。有效消息编号在 [1, 消息计数] 范围内

如何修复索引异常

根据描述,有效消息从 1 开始,但您循环到 0:

            for (int i = messageCount - 1; i > -1; i--)

应该是:

            for (int i = messageCount; i > 0; i--)