我在工程里定义了一个pop3client类,然后在主界面里定义了关于这个类的一个list,想要实现给这个list里每一个对象的参数赋值,运行显示索引超出范围这是类  class pop3client
    {
        public string sender1;
        public string senderaddress;
        public string senderdate;
        public string subject;
        public string content;
        public MIME_Entity[] attachment;
        public string filename;
        public int num;
        public pop3client() { }
            }这是主界面程序 private List<pop3client> mailreceive = new List<pop3client>(100); //接收邮件
                POP3_Client pop = new POP3_Client();
                pop.Connect(POPserver, 995, true);
                liststatus.Items.Add("连接成功");
                pop.Login(user, password);
                POP3_ClientMessageCollection messages = pop.Messages;
                for(int i = 1; i < mailnumber; i++)
                {
                    POP3_ClientMessage message = messages[i];
                  if(message != null)
                    {
                        Byte[] messageBytes = message.MessageToByte();
                        Mail_Message mimemessage = Mail_Message.ParseFromByte(messageBytes);
                        mailreceive.Add(null);
                        mailreceive[i].sender1= mimemessage.From[0].DisplayName;//从这句开始报错,显示索引超出范围,应为非负值
                        mailreceive[i].senderaddress = mimemessage.From[0].Address;
                        mailreceive[i].senderdate = mimemessage.Date.ToLongDateString();
                        mailreceive[i].subject = mimemessage.Subject;
                        mailreceive[i].content = mimemessage.BodyText;
                        mailreceive[i].attachment = mimemessage.GetAttachments(true, true);
                        mailreceive[i].num = i + 1;
                            listView1.Items.Add(new ListViewItem(new string[] { (i+1).ToString(), mailreceive[i].sender1, mailreceive[i].subject, mailreceive[i].senderdate, "无" }));
                            foreach (MIME_Entity entity in mailreceive[i].attachment)
                            {
                                string filename = entity.ContentDisposition.Param_FileName;
                            listView1.Items[i].SubItems.Add(" ");
                            listView1.Items[i].SubItems[3].Text = filename;
                             
                            }
                    }
                }

解决方案 »

  1.   

    数组的索引从0开始,数组的索引从0开始,数组的索引从0开始
     for(int i = 1; i < mailnumber; i++)//i的初始化换成0即可解决问题
                    {
                        POP3_ClientMessage message = messages[i];
                      if(message != null)
                        {
                            Byte[] messageBytes = message.MessageToByte();
                            Mail_Message mimemessage = Mail_Message.ParseFromByte(messageBytes);
                            mailreceive.Add(null);//添加第一个对象,对象索引为0
                            mailreceive[i].sender1= mimemessage.From[0].DisplayName;//代码i取值为1   报错
                            mailreceive[i].senderaddress = mimemessage.From[0].Address;
                            mailreceive[i].senderdate = mimemessage.Date.ToLongDateString();
                            mailreceive[i].subject = mimemessage.Subject;
                            mailreceive[i].content = mimemessage.BodyText;
                            mailreceive[i].attachment = mimemessage.GetAttachments(true, true);
                            mailreceive[i].num = i + 1;
                                listView1.Items.Add(new ListViewItem(new string[] { (i+1).ToString(), mailreceive[i].sender1, mailreceive[i].subject, mailreceive[i].senderdate, "无" }));
                                foreach (MIME_Entity entity in mailreceive[i].attachment)
                                {
                                    string filename = entity.ContentDisposition.Param_FileName;
                                listView1.Items[i].SubItems.Add(" ");
                                listView1.Items[i].SubItems[3].Text = filename;
                                 
                                }
                        }
      

  2.   

    直接Add内容不行吗?
      

  3.   

    C#里的下标是从0开始的,另外,mailnumber就哪里来的?这个值是否正确?
    代码中mailreceive.Add(null);然后就对其赋值,也是不行的,需要添加一个新的对象:mailreceive.Add(new pop3client());
      

  4.   

    你既然
    mailreceive.Add(null);
    那么
    mailreceive[i].sender1的第一个元素就是 null.sender1.肯定是要报错的把。
      

  5.   

    mimemessage.From[0]应该是没有值吧
      

  6.   

    确定你 mailnumber 的值是否等于100,再就for从0开始取
      

  7.   

    真可以,都在回避基本问题new List<pop3client>(100)
    初始化 List<pop3client> 类的新实例,该实例为空并且具有指定的初始容量 100。知道你做了什么,也就知道为什么会报错了