Ich wollte eine .ToList()
Erweiterungsmethode für das Objekt Recipients
für Outlook machen, aber ich war mir nicht sicher, ob es eine gute Übung ist. Würde es einen zusätzlichen Verweis auf das Objekt erstellen, das aufgeräumt werden müsste, oder wäre es in Ordnung, solange ich das ursprüngliche Recipients
Objekt bereinige? Die Erweiterung würde in etwa so verwendet werden.Sind Erweiterungsmethoden für COM-Objekte fehlerhaft?
private void Foo()
{
Recipeints recipients = mailItem.Recipients //Original recipients
if(recipients.ToList().Intersect(listOfRecipients).Any())
{ }
OutlookEx.ReleaseComObject(ref recipients);
}
public static class Extensions
{
public static List<string> ToList(this Outlook.Recipients recipients)
{
List<string> list= new List<string>();
if(recipients == null)
return null;
for (int i = 1; i <= recipients.Count; i++)
{
Outlook.Recipient r = recipients[i];
list.Add(r.Name);
OutlookEx.ReleaseComObject(ref r);
}
return list
}
}
Ist 'OutlookEx.ReleaseComObject' gehen schließlich zu nennen' Marshal.ReleaseComObject' oder 'Marshal.FinalReleaseComObject'? – acelent
Ja, es ist nur eine statische Methode, die 'Marshal.ReleaseComObject (o)' und 'o = null' aufruft. – Natzely
Ok, das habe ich vermutet. Bitte recherchiere darüber und sei sehr vorsichtig. ** Wenn du zum Beispiel andere Referenzen hast, sogar nur einen, zu einem "Empfänger", den du so frei machst, wirst du RCW-Ausnahmen bekommen. Meistens sind Sie besser mit erzwungenen Speicherbereinigungen ausgestattet. – acelent