将列表对象添加到类成员

时间:2014-09-12 21:00:23

标签: c# asp.net-mvc-4 smtp

我有一个对象,我正在尝试添加项目。在其他更复杂类的例子中,我使用了ObservableCollections,但这很简单(我想)。当我尝试添加到最后一行的SendToList对象时,我得到“对象引用未设置为对象的实例”。我究竟做错了什么?提前完成。

我的模特:

    public class MailModels
{
    public string From { get; set; }
    public string ToMain { get; set; }
    public string ToCC { get; set; }
    public string ToBCC { get; set; }
    public string Subject { get; set; }
    public string Body { get; set; }
    public List<MailGetter> SendToList { get; set; }
    public List<MailGetter> SendToCCList { get; set; }
    public List<MailGetter> SendToBCCList { get; set; }
}

public class MailGetter
{
    public string MailName { get; set; }
    public string MailEmailAddy { get; set; }
}

我的控制器:

        MailModels mm = new MailModels();
        // going to need a foreach loop here for multiple additions
        MailGetter mg = new MailGetter()
        {
            MailName = "myName",
            MailEmailAddy = "myname@myserver.com"            
        };

        mm.Subject = "test email";
        mm.Body = DateTime.Now.ToString();
        mm.SendToList.Add(mg);

2 个答案:

答案 0 :(得分:2)

您尚未实例化List,在添加项目之前实例化它:

mm.SendToList = new List<MailGetter>();
mm.SendToList.Add(mg);

或者您可以在Model的构造函数中实例化它们:

 public class MailModels
{
    public string From { get; set; }
    public string ToMain { get; set; }
    public string ToCC { get; set; }
    public string ToBCC { get; set; }
    public string Subject { get; set; }
    public string Body { get; set; }
    public List<MailGetter> SendToList { get; set; }
    public List<MailGetter> SendToCCList { get; set; }
    public List<MailGetter> SendToBCCList { get; set; }

    public MailModels()
    {
       this.SendToList  = new List<MailGetter>();
       this.SendToCCList = new new List<MailGetter>();
       this.SendToBCCList = new new List<MailGetter>();
    } 
}

然后你不需要再次实例化它们,因为它们是在Model的对象创建时实例化的:

MailModels mm = new MailModels();
mm.SendToList.Add(mg);

答案 1 :(得分:1)

此时您的列表为null。您应该在添加新项目之前对其进行初始化:

mm.SendToList = new List<MailGetter>();
mm.SendToList.Add(mg);

或者甚至更好,您将列表的setter设为private并在MailModels的构造函数中初始化列表:

public class MailModels
{
    public MailModels()
    {
      this.SendToList = new List<MailGetter>();
    }

    ...
    public List<MailGetter> SendToList { get; private set; }
    ...
}

您可以为班级中的所有列表执行此操作。然后,您无需在访问列表之前初始化列表。并且您可以确定该列表不是null,因为它不能从类外部设置为null(因为私有设置器)。