C#重写List <T>添加方法以检查列表是否为空

dvo*_*dvo 3 c# overriding list

我想弄清楚这是否可行/使其正确运行的正确语法。null在属性级别添加新项目时,我想对列表进行检查,而不是null每次去列表中添加项目时都要进行检查。例如:

MyClass someClass = new MyClass()
{
    MyClassID = 1,
    Notes = null
};

//
//

Note newNote = new Note()
{
    NoteID = 1,
    Text = "Test note"
};

someClass.Notes.Add(newNote); // This line will throw an error because 
                              //      someClass.Notes is null
Run Code Online (Sandbox Code Playgroud)

我想通过执行以下代码来解决此问题。但是,我不知道是否/什么语法使之成为可能。

public class MyClass
{
    public int MyClassID { get; set; }
    public List<Note> Notes
    {
        get; set;

        public void Add(Note note)
        {
            if (this.Notes == null)
                this.Notes = new List<Note>();

            this.Notes.Add(note);
        }
    }
}

public class Note
{
    public int NoteID { get; set; }
    public string Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

**我知道我可以在执行操作之前对null进行检查someClass.Notes == null并将其分配给我new List<Note>().Add(newNote)但是我想在属性级别执行此操作,因此我不必每次都需要添加这两个代码行时就复制新笔记。

Ant*_*e V 12

最好在的构造函数中初始化列表 MyClass

public class MyClass
{
    public MyClass()
    {
        Notes = new List<Note>();
    }
}
Run Code Online (Sandbox Code Playgroud)


Dmi*_*nko 7

让我们介绍一下支持领域 private List<Note> m_Notes

public class MyClass
{
    public int MyClassID { get; set; } 

    // Empty list by default
    private List<Note> m_Notes = new List<Note>();

    public List<Note> Notes
    {
        get
        {
            return m_Notes; 
        }
        set // If you really want "set" in the context
        {
            // Assign empty list if value is null
            m_Notes = value ?? new List<Note>();
        }   
    }
}
Run Code Online (Sandbox Code Playgroud)