0

Meine Methode benötigt einen Outlook.MailItem als Parameter. Nachdem ich das MailItem-Objekt untersucht und die Dokumentation gelesen hatte, bemerkte ich, dass es eine Eigenschaft namens Sender hatte, die eine AddressEntry zurückgibt. Wenn ich diese Eigenschaft verwenden wollte, bekam ich die folgende Fehlermeldung: Cannot resolve symbol 'Sender', und Absender wurde rot hervorgehoben. Der Versuch, die Hervorhebung Ergebnisse in zu bauen und zu ignorieren:Warum kann diese Eigenschaft nicht aufgelöst werden, aber zugänglich, wenn ich über einen dynamischen Cast gehe?

'Microsoft.Office.Interop.Outlook.MailItem' does not contain a definition for 'Sender' and no extension method 'Sender' accepting a first argument of type 'Microsoft.Office.Interop.Outlook.MailItem' could be found (are you missing a using directive or an assembly reference?)

Seltsam, sagt die Dokumentation Eigentum existieren und wenn ich mich debuggen kann sogar den Wert überprüfen. (Ich habe auf diesem alten Projekt VS2010 verwenden, um die Debug-Inspektion nicht groß mit allen System.__ComObject ‚s ist, aber ich kann den Wert von Sender überprüfen, so dass es existiert.)

Allerdings, wenn ich die MailItem goss dynamic, kann ich den Sender zugreifen, als ohne Probleme folgt:

var sender = (AddressEntry)((dynamic)mailItem).Sender; 

Was mache ich falsch hier? Ich mache derzeit VS2010 dafür verantwortlich, dass es keine bessere Erklärung gibt.

+1

IIRC 'dynamic' wurde der Sprache teilweise hinzugefügt, um zu ermöglichen, dass' IDispatch'-Objekte wie dieses als normale C# -Klasseninstanzen behandelt werden. –

+0

Für was es wert ist (vielleicht nichts) Ich kann bestätigen, es funktioniert gut in VS 2012 und 2014 ... 'mailItem.Sender'. Haben Sie den richtigen Namespace angegeben? 'Verwenden von Microsoft.Office.Interop.Outlook;' – musefan

+0

Nicht sicher, ob ich etwas vermisse, wenn ich die Dokumentation ansehe, die ich "AddressEntry" -Schnittstelle nicht sehe, habe eine Eigenschaft von 'Sender', aber' MailItem' tut es. Vielleicht wollten Sie es als 'MailItem' darstellen? – 12seconds

Antwort

0

Okay, vor allem danke an alle, die sich die Zeit zum Nachdenken genommen haben.

Es stellte sich heraus, dass MailItem ist eine Schnittstelle (so THAT ‚s, warum youput ein I vor Ihrem Interface-Namen, wie IMailItem), und ich hatte eine ältere Version von Microsoft.Office.Interop.Outlook; in meiner Lösung. Sobald ich diese (und die Office Referenz, auf die es ankommt) auf eine neuere Version aktualisierte, konnte ich auf die MailItem.Sender zugreifen.

So war es in der Dokumentation für eine neuere Version ... Mein schlechtes!

Verwandte Themen