[英]C# Cloning Objects that implement neither IClonable or ISerializable
我已经尝试了所有我能想到的并且无法解决的问题。 基本上,我正在制作一个Outlook 2010加载项,它对传入的HTML格式的电子邮件进行了调整,目的是使它们对视障用户(尤其是视障用户)更易于访问。
一切正常,除了运行我的加载项时,无论我尝试什么,它实际上都尝试修改原始电子邮件,哪个与Exchange连接的Outlook根本不喜欢并拒绝。 我想要做的是显示修改过的电子邮件,其中包含所有好东西(答复,全部答复,密件抄送等),就像您通常使用Outlook一样,而无需修改原始消息……也就是说,我只想要显示我修改过的消息,而不修改存储的消息或添加新消息。
如:
if (selObject is Outlook.MailItem)
{
Outlook.MailItem mailItem = (selObject as Outlook.MailItem);
Outlook.MailItem accessible_mail_item = mailItem;
...rest of my code...
accessible_mail_item.Display(false);
}
我的问题是,“ accessible_mail_item”不是“ mailItem”的副本...而是指向它的指针。 如何制作此不可序列化/可克隆对象的副本/克隆? 我已经尝试过各种“深度克隆”功能,但是它们都给我有关“不可序列化”或类似错误的错误。
有什么原因不能使用MailItem.Copy
方法?
Outlook.MailItem mailItem = (selObject as Outlook.MailItem);
Outlook.MailItem accessible_mail_item = mailItem.Copy();
...rest of my code...
accessible_mail_item.Display(false);
如果该类不是为支持复制/克隆操作而设计的,那么您将不太可能提出能够产生功能性克隆的代码。 对于表示不同外部实体矿石资源的对象尤其如此。 即您希望通过克隆HttpResponse
来创建远程服务器页面的副本,还是通过克隆相应的受管对象来创建重复的SQL Server? 与Outlook邮件相同-将邮件项目表示为托管代码的对象不是实际的邮件项目,而是在某处获取/修改邮件的评级方法。
我建议您浏览一下Outlook API,看看是否有一种方法可以按照您想要的方式创建项目的副本。 您还可以尝试通过Outlook API创建新的邮件项目,然后手动复制您感兴趣的属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.