2

私は考えられるすべてを試しましたが、これを理解することはできません。基本的に、私はOutlook 2010アドインを作成しています。このアドインは、視覚障害のあるユーザー(特に視覚障害のあるユーザー)が電子メールにアクセスしやすくするために、受信するHTML形式の電子メールを調整します。

アドインを実行すると、何を試しても元の電子メールを実際に変更しようとすることを除いて、すべて正常に機能します。Exchangeに接続されたOutlookはまったく気に入らず、拒否します。私がやりたいのは、元のメッセージを変更せずに、変更した電子メールメッセージをすべての機能(返信、全員に返信、BCCなど、通常は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」のコピーではないということです...それはそれへのポインタです。この非シリアル化/クローン可能オブジェクトのコピー/クローンを作成するにはどうすればよいですか?さまざまな「ディープクローン」機能を試しましたが、「シリアル化できない」などのエラーが発生します。

4

3 に答える 3

1

メソッドを使用できない理由はあります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);
于 2012-09-27T18:29:35.677 に答える
0

クラスがコピー/クローン操作をサポートするように設計されていない場合、機能的なクローンを生成するコードを思い付くことができる可能性はほとんどありません。これは、さまざまな外部エンティティまたはリソースを表すオブジェクトに特に当てはまります。HttpResponseつまり、クローンを作成してリモート サーバー ページのコピーを作成したり、対応する管理対象オブジェクトをクローンして複製 SQL サーバーを作成したりすることを期待しますか? Outlook メッセージと同じです。マネージ コードへのメール アイテムを表すオブジェクトは、実際のメール アイテムではなく、評価者がどこかで取得/変更する方法です。

Outlook API を調べて、希望する方法でアイテムのコピーを作成する方法があるかどうかを確認することをお勧めします。また、Outlook API を使用して新しいメール アイテムを作成し、関心のあるプロパティを手動でコピーすることもできます。

于 2012-09-26T04:37:14.447 に答える
0

オブジェクトをシリアル化してから新しいオブジェクトに逆シリアル化し (BinaryFormatter などを使用)、クローンを作成する Deep Clone メソッドを試しているようです。もちろん、これには、複製するオブジェクトがシリアライズ可能である必要があります。

ディープ クローニングへの他のアプローチを試しましたか? (例: Reflection、IL、ExpressionTrees)。これらのいずれかを使用すると、シリアル化アプローチよりもはるかに高速になるはずであり、オブジェクトを Serializable でマークアップしたり、ICloneable を実装したりする必要はありません。

IL ディープ クローンの実装についてはこちらを、リフレクション、式ツリー アプローチについてはこちらをお試しください。

于 2012-09-26T02:51:05.860 に答える