C#泛型用作属性的对象列表 - 无法添加值

Nil*_*ils 9 c# generics properties

我是第一次尝试仿制药而且遇到了问题.

我有一个dll批量发送消息

  • 该DLL中有一个"Message"类和一个"Batch"类

  • 在批次类上,我有一些公共属性

  • 批处理类的公共属性是一个名为"Messages"的属性,它是"Message"类的列表,如下所示:

     public List<Message> Messages {get;set;}
    
    Run Code Online (Sandbox Code Playgroud)

方法1

然后我有一个测试exe,我想在"Batch"类上设置属性,如下所示:

Batch myBatch = new Batch()
myBatch.Messages.Add(
  new MyNameSpace.Message(txtToAddress.Text, txtMessage.Text));
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时,我得到:

"你调用的对象是空的."

方法2

玩了一下后,我看到我可以在测试exe中成功完成以下操作:

List<MyNameSpace.Message> myMessages = new List<MyNameSpace.Message>();
myBatch.Messages.Add(
 new MyNameSpace.Message(txtToAddress.Text, txtMessage.Text));
myBatch.Messages = myMessages;
Run Code Online (Sandbox Code Playgroud)

我想让它以第一种方式工作,因为其他程序员将使用dll,并且使用第一种方法似乎更直观.

为了让第一种方法起作用,我错过了什么?

Mar*_*ell 20

通常,集合由父对象初始化:

public List<Message> Messages {get; private set;}

public Batch() { // constructor
    Messages = new List<Message>();
}
Run Code Online (Sandbox Code Playgroud)

现在它应该按预期工作.请注意,如果您正在使用,则XmlSerializer需要保留公共设置...

在某些方面,这里的长手资产代码更容易:

private List<Message> messages = new List<Message>();
public List<Message> Messages { get {return messages; } }
Run Code Online (Sandbox Code Playgroud)

(没有弄乱构造函数等)