我在工程里定义了一个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;
}
}
}
{
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;
}
}
}
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;
}
}
代码中mailreceive.Add(null);然后就对其赋值,也是不行的,需要添加一个新的对象:mailreceive.Add(new pop3client());
mailreceive.Add(null);
那么
mailreceive[i].sender1的第一个元素就是 null.sender1.肯定是要报错的把。
初始化 List<pop3client> 类的新实例,该实例为空并且具有指定的初始容量 100。知道你做了什么,也就知道为什么会报错了