簡體   English   中英

將列表對象添加到類成員

[英]Adding list object to class member

我有一個要添加項目的對象。 在其他具有更復雜類的示例中,我使用了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);

您尚未實例化列表,請先實例化列表,然后再在其中添加項目:

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);

此時您的列表為null 您應該在添加新項目之前對其進行初始化:

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

甚至更好的是,將列表的設置器MailModels私有,然后在MailModels的構造函數中初始化列表:

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

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

您可以為課程中的所有列表執行此操作。 然后,您無需在訪問列表之前對其進行初始化。 並且您可以確保該列表不為null ,因為不能從類外部將其設置為null (由於私有設置器)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM