我第一次尝试仿制药,有问题.
我有一个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; } }
(不要搞乱构造函数等)