C#中的AttachmentCollection attachmentCollection

问题描述 投票:3回答:4

我正在尝试在C#中使用AttachmentCollection类,当我尝试创建它的新实例时,它给出了一个错误,说“错误32类型'System.Net.Mail.AttachmentCollection'没有定义构造函数”....这是我正在尝试的,如果没有定义构造函数,如何创建一个新的实例?

AttachmentCollection attachmentCollection = new AttachmentCollection();

谢谢你的帮助!

c# visual-studio visual-studio-2008
4个回答
6
投票

某些类型不是为实例化而设计的。

它们可能是抽象的,这意味着您需要扩展类并填充其一些功能。

他们可能还需要一些大量工作才能正确创建它们。这些类型经常暴露公共静态方法或具有可用于实例化它们的工厂。

文档声明“AttachmentCollection类的实例由MailMessage.AlternateViews和MailMessage.Attachments属性返回。”好像设计师不希望你创建这个系列;其目的是仅与MailMessage类一起使用。

让MailMessage类为您处理其AttachmentCollections。创建MailMessage的实例,然后填写AlternateViews和Attachments,而不是创建集合,填写它,然后将其分配给属性。

最后一件事,大多数集合的公共属性都没有setter。它被认为是一种糟糕的设计,允许您的类型的用户能够设置甚至清空您的公共集合属性。


4
投票

如果不使用反射,则无法创建它的新实例。

相反,您可以创建一个新的MailMessage“message = new MailMessage(...)”(创建它自己的AttachmentCollection),并调用“message.Attatchments.Add(...)”来添加附件。

AttachmentCollection的构造函数是内部的,它是一种只能从MailMessage中使用的类型。

请参阅AttachmentCollection的msdn文档。


3
投票

我认为你没有正确使用AttachmentCollection。查看MSDN docs中的示例(基本上,您应该使用messages.Attachments.add(foo):

string file = "data.xls";
MailMessage message = new MailMessage(
   "[email protected]",
   "[email protected]",
   "Quarterly data report.",
   "See the attached spreadsheet.");

Attachment data = new Attachment(file, MediaTypeNames.Application.Octet);
// Add time stamp information for the file.
ContentDisposition disposition = data.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(file);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
// Add the file attachment to this e-mail message.
message.Attachments.Add(data);

0
投票

当然这可能是一个糟糕的设计,但回答这个问题:

AttachmentCollection attachmentCollection = new MailMessage().Attachments;
© www.soinside.com 2019 - 2024. All rights reserved.