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

我第一次尝试仿制药,有问题.

我有一个dll批量发送消息

>在该dll中有一个“消息”类和一个“批处理”类
>在批次类上,我有一些公共属性
> on的批次类的公共属性一个名为“Messages”的属性,它是“Message”类的列表,如下所示:

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

方法1

然后我有一个测试exe,我想在“批处理”类中设置属性如下:

Batch myBatch = new Batch()
myBatch.Messages.Add(
  new MyNameSpace.Message(txtToAddress.Text,txtMessage.Text));

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

“你调用的对象是空的.”

方法2

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

List<MyNameSpace.Message> myMessages = new List<MyNameSpace.Message>();
myBatch.Messages.Add(
 new MyNameSpace.Message(txtToAddress.Text,txtMessage.Text));
myBatch.Messages = myMessages;

我想让它的第一种方式工作,因为其他程序员将使用dll,似乎更有意义的使用第一种方法.

我没有想到第一种方法工作?

解决方法

通常,集合由父对象初始化:
public List<Message> Messages {get; private set;}

public Batch() { // constructor
    Messages = new List<Message>();
}

现在它应该按预期工作.请注意,如果您使用XmlSerializer,您还需要保持公共集合

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

private List<Message> messages = new List<Message>();
public List<Message> Messages { get {return messages; } }

(不要搞乱构造函数等)

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...